diff options
| author | kaashoek <kaashoek> | 2006-09-08 14:48:07 +0000 | 
|---|---|---|
| committer | kaashoek <kaashoek> | 2006-09-08 14:48:07 +0000 | 
| commit | 5cb7877e0f1dd09a513859f018d3981a9c9d17ad (patch) | |
| tree | 9b37310457294ef2b690d2b05c05958b37ef0b32 | |
| parent | f80873e60276a644ef085750881ee43911fed492 (diff) | |
| download | xv6-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.
| -rw-r--r-- | main.c | 12 | ||||
| -rw-r--r-- | mp.c | 3 | 
2 files changed, 9 insertions, 6 deletions
| @@ -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()); @@ -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); | 
