diff options
-rw-r--r-- | i386/i386/intel_startCPU.c | 9 | ||||
-rw-r--r-- | kern/cpu_number.c | 3 |
2 files changed, 11 insertions, 1 deletions
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 <i386/i386/pcb.h> #include <i386/i386/tss.h> + 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++; } |