bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 03/12 gnumach] Print warning on bad cpu numbering and assume BSP


From: Damien Zammit
Subject: [PATCH 03/12 gnumach] Print warning on bad cpu numbering and assume BSP
Date: Tue, 31 Jan 2023 09:36:12 +0000

---
 i386/i386/apic.c       |  5 +++++
 i386/i386/cpu_number.c | 16 +++++++++++++---
 2 files changed, 18 insertions(+), 3 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 65d74ddc..c719d841 100644
--- a/i386/i386/cpu_number.c
+++ b/i386/i386/cpu_number.c
@@ -19,14 +19,24 @@
 #include <i386/apic.h>
 #include <i386/smp.h>
 #include <i386/cpu.h>
+#include <kern/printf.h>

 #if NCPUS > 1
 int cpu_number(void)
 {
-       int kernel_id;
-       unsigned long flags;
+       int kernel_id, apic_id;

-       kernel_id = apic_get_cpu_kernel_id(apic_get_current_cpu());
+       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;
+       }

        return kernel_id;
 }
--
2.34.1





reply via email to

[Prev in Thread] Current Thread [Next in Thread]