aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2023-01-31 09:36:12 +0000
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2023-01-31 20:41:00 +0100
commit6297dd6ed5c291d497d16090a0421a28d2fc19dd (patch)
tree2db044adbf0216c78a1ca49a38eca10156adcb55
parentfc842a857524dad5209d01e7f6fec7387e4daf18 (diff)
downloadgnumach-6297dd6ed5c291d497d16090a0421a28d2fc19dd.tar.gz
gnumach-6297dd6ed5c291d497d16090a0421a28d2fc19dd.tar.bz2
gnumach-6297dd6ed5c291d497d16090a0421a28d2fc19dd.zip
Print warning on bad cpu numbering and assume BSP
Message-Id: <20230131093428.756906-4-damien@zamaudio.com>
-rw-r--r--i386/i386/apic.c5
-rw-r--r--i386/i386/cpu_number.c14
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