summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorkaashoek <kaashoek>2006-09-08 14:48:07 +0000
committerkaashoek <kaashoek>2006-09-08 14:48:07 +0000
commit5cb7877e0f1dd09a513859f018d3981a9c9d17ad (patch)
tree9b37310457294ef2b690d2b05c05958b37ef0b32 /main.c
parentf80873e60276a644ef085750881ee43911fed492 (diff)
downloadxv6-labs-5cb7877e0f1dd09a513859f018d3981a9c9d17ad.tar.gz
xv6-labs-5cb7877e0f1dd09a513859f018d3981a9c9d17ad.tar.bz2
xv6-labs-5cb7877e0f1dd09a513859f018d3981a9c9d17ad.zip
use bootstrap processor as specified by MP table. typically 0, but not
guaranteed.
Diffstat (limited to 'main.c')
-rw-r--r--main.c12
1 files changed, 7 insertions, 5 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());