equal
deleted
inserted
replaced
3262 |
3262 |
3263 uint apic_id = edx; |
3263 uint apic_id = edx; |
3264 int processor_id = Atomic::load(&mapping[apic_id]); |
3264 int processor_id = Atomic::load(&mapping[apic_id]); |
3265 |
3265 |
3266 while (processor_id < 0) { |
3266 while (processor_id < 0) { |
3267 if (Atomic::cmpxchg(-2, &mapping[apic_id], -1)) { |
3267 if (Atomic::cmpxchg(-2, &mapping[apic_id], -1) == -1) { |
3268 Atomic::store(Atomic::add(1, &next_processor_id) - 1, &mapping[apic_id]); |
3268 Atomic::store(Atomic::add(1, &next_processor_id) - 1, &mapping[apic_id]); |
3269 } |
3269 } |
3270 processor_id = Atomic::load(&mapping[apic_id]); |
3270 processor_id = Atomic::load(&mapping[apic_id]); |
3271 } |
3271 } |
|
3272 |
|
3273 assert(processor_id >= 0 && processor_id < os::processor_count(), "invalid processor id"); |
3272 |
3274 |
3273 return (uint)processor_id; |
3275 return (uint)processor_id; |
3274 } |
3276 } |
3275 #endif |
3277 #endif |
3276 |
3278 |