src/hotspot/os/bsd/os_bsd.cpp
changeset 59242 6ba3d8d41135
parent 59157 b313bcb68b4c
child 59247 56bf71d64d51
equal deleted inserted replaced
59241:23ecaf949f8f 59242:6ba3d8d41135
  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