From 5cb7877e0f1dd09a513859f018d3981a9c9d17ad Mon Sep 17 00:00:00 2001
From: kaashoek <kaashoek>
Date: Fri, 8 Sep 2006 14:48:07 +0000
Subject: [PATCH] use bootstrap processor as specified by MP table. typically
 0, but not guaranteed.

---
 main.c | 12 +++++++-----
 mp.c   |  3 ++-
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/main.c b/main.c
index cd893d5..5781322 100644
--- a/main.c
+++ b/main.c
@@ -23,22 +23,24 @@ void
 main0(void)
 {
   int i;
+  int bcpu;
   struct proc *p;
 
   // clear BSS
   memset(edata, 0, end - edata);
 
-  // switch to bootstrap processor's stack
-  asm volatile("movl %0, %%esp" : : "r" (cpus[0].mpstack + MPSTACK - 32));
-  asm volatile("movl %0, %%ebp" : : "r" (cpus[0].mpstack + MPSTACK));
-
   // Prevent release() from enabling interrupts.
   for(i=0; i<NCPU; i++)
     cpus[i].nlock = 1;
 
   mp_init(); // collect info about this machine
+  bcpu = mp_bcpu();
+
+  // switch to bootstrap processor's stack
+  asm volatile("movl %0, %%esp" : : "r" (cpus[0].mpstack + MPSTACK - 32));
+  asm volatile("movl %0, %%ebp" : : "r" (cpus[0].mpstack + MPSTACK));
 
-  lapic_init(mp_bcpu());
+  lapic_init(bcpu);
 
   cprintf("\ncpu%d: starting xv6\n\n", cpu());
 
diff --git a/mp.c b/mp.c
index 59beda3..c34982d 100644
--- a/mp.c
+++ b/mp.c
@@ -191,7 +191,8 @@ mp_init(void)
 int
 mp_bcpu(void)
 {
-  return bcpu-cpus;
+  if (ismp) return bcpu-cpus;
+  else return 0;
 }
 
 extern void mpmain(void);
-- 
GitLab