From c5be0cc4ab21c2306141ac3159a1c33d7ec6f6ec Mon Sep 17 00:00:00 2001 From: AlmuHS Date: Sat, 7 Jul 2018 21:43:41 +0200 Subject: added kernel2apic vector --- i386/i386/intel_startCPU.c | 9 ++++++++- kern/cpu_number.c | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/i386/i386/intel_startCPU.c b/i386/i386/intel_startCPU.c index 193a4dd1..0a418415 100644 --- a/i386/i386/intel_startCPU.c +++ b/i386/i386/intel_startCPU.c @@ -5,13 +5,20 @@ #include #include + static struct kmutex mp_cpu_boot_lock; +extern int apic2kernel[]; +extern int kernel2apic[]; + kern_return_t intel_startCPU(int slot_num) { - int lapic = cpu_to_lapic[slot_num]; + /*int lapic = cpu_to_lapic[slot_num];*/ + int lapic = kernel2apic[slot_num]; int eFlagsRegister; + kmutex_init(&mp_cpu_boot_lock); + assert(lapic != -1); DBGLOG_CPU_INIT(slot_num); diff --git a/kern/cpu_number.c b/kern/cpu_number.c index aa092c00..21a2492a 100644 --- a/kern/cpu_number.c +++ b/kern/cpu_number.c @@ -1,5 +1,6 @@ #define MAX_CPUS 32 /* (8*sizeof(long)) */ +int kernel2apic[MAX_CPUS]; int apic2kernel[MAX_CPUS]; int cpu_number_start = 0, cpu_number_counter = 0; @@ -11,6 +12,7 @@ int cpu_number(void) { if (!cpu_number_start) { for (i = 0; i < MAX_CPUS; i++) { apic2kernel[i] = -1; + kernel2apic[i] = -1; } cpu_number_start = 1; } @@ -22,6 +24,7 @@ int cpu_number(void) { return apic2kernel[apic_id]; } else { apic2kernel[apic_id] = cpu_number_counter; + kernel2apic[cpu_number_counter] = apic_id; cpu_number_counter++; } -- cgit v1.2.3