--- old/src/hotspot/os/bsd/os_bsd.cpp 2019-05-28 09:27:07.268639039 +0200 +++ new/src/hotspot/os/bsd/os_bsd.cpp 2019-05-28 09:27:06.732639058 +0200 @@ -3261,14 +3261,14 @@ } #ifdef __APPLE__ -uint os::processor_id() { - static volatile int* volatile apic_to_cpu_mapping = NULL; - static volatile int next_cpu_id = 0; +static volatile int* volatile apic_to_processor_mapping = NULL; +static volatile int next_processor_id = 0; - volatile int* mapping = OrderAccess::load_acquire(&apic_to_cpu_mapping); +static inline volatile int* get_apic_to_processor_mapping() { + volatile int* mapping = OrderAccess::load_acquire(&apic_to_processor_mapping); if (mapping == NULL) { // Calculate possible number space for APIC ids. This space is not necessarily - // in the range [0, number_of_cpus). + // in the range [0, number_of_processors). uint total_bits = 0; for (uint i = 0;; ++i) { uint eax = 0xb; // Query topology leaf @@ -3295,12 +3295,18 @@ mapping[i] = -1; } - if (!Atomic::replace_if_null(mapping, &apic_to_cpu_mapping)) { + if (!Atomic::replace_if_null(mapping, &apic_to_processor_mapping)) { FREE_C_HEAP_ARRAY(int, mapping); - mapping = OrderAccess::load_acquire(&apic_to_cpu_mapping); + mapping = OrderAccess::load_acquire(&apic_to_processor_mapping); } } + return mapping; +} + +uint os::processor_id() { + volatile int* mapping = get_apic_to_processor_mapping(); + uint eax = 0xb; uint ebx; uint ecx = 0; @@ -3312,16 +3318,16 @@ // [0, num_processors) range. uint apic_id = edx; - int cpu_id = Atomic::load(&mapping[apic_id]); + int processor_id = Atomic::load(&mapping[apic_id]); - while (cpu_id < 0) { + while (processor_id < 0) { if (Atomic::cmpxchg(-2, &mapping[apic_id], -1)) { - Atomic::store(Atomic::add(1, &next_cpu_id) - 1, &mapping[apic_id]); + Atomic::store(Atomic::add(1, &next_processor_id) - 1, &mapping[apic_id]); } - cpu_id = Atomic::load(&mapping[apic_id]); + processor_id = Atomic::load(&mapping[apic_id]); } - return (uint)cpu_id; + return (uint)processor_id; } #endif