diff options
-rw-r--r-- | i386/i386/apic.c | 5 | ||||
-rw-r--r-- | i386/i386/cpu_number.c | 14 |
2 files changed, 18 insertions, 1 deletions
diff --git a/i386/i386/apic.c b/i386/i386/apic.c index e53d4749..891ce288 100644 --- a/i386/i386/apic.c +++ b/i386/i386/apic.c @@ -278,6 +278,11 @@ lapic_enable(void) cpu_intr_save(&flags); apic_id = apic_get_current_cpu(); + if (apic_id < 0) + { + printf("apic_get_current_cpu() failed, assuming BSP\n"); + apic_id = 0; + } dummy = lapic->dest_format.r; lapic->dest_format.r = 0xffffffff; /* flat model */ diff --git a/i386/i386/cpu_number.c b/i386/i386/cpu_number.c index 20bf2399..ad4c4b01 100644 --- a/i386/i386/cpu_number.c +++ b/i386/i386/cpu_number.c @@ -19,10 +19,22 @@ #include <i386/apic.h> #include <i386/smp.h> #include <i386/cpu.h> +#include <kern/printf.h> #if NCPUS > 1 int cpu_number(void) { - return apic_get_cpu_kernel_id(apic_get_current_cpu()); + int kernel_id, apic_id; + apic_id = apic_get_current_cpu(); + if (apic_id < 0) { + printf("apic_get_current_cpu() failed, assuming BSP\n"); + apic_id = 0; + } + + kernel_id = apic_get_cpu_kernel_id(apic_id); + if (kernel_id < 0) { + printf("apic_get_cpu_kernel_id() failed, assuming BSP\n"); + kernel_id = 0; + } } #endif |