diff options
| -rw-r--r-- | bootother.S | 2 | ||||
| -rw-r--r-- | mp.c | 14 | 
2 files changed, 7 insertions, 9 deletions
| diff --git a/bootother.S b/bootother.S index eee5ebe..8f2b2ce 100644 --- a/bootother.S +++ b/bootother.S @@ -14,7 +14,7 @@   * mp.c puts the correct %esp in start-4, and the place to jump   * to in start-8.   *	 - * Credit: Cliff Frey + * Credit: Cliff Frey and Plan 9   */  .set PROT_MODE_CSEG,0x8		# code segment selector @@ -91,20 +91,18 @@ enum {					/* LAPIC_TDCR */  };  #define APBOOTCODE 0x7000 // XXX hack +#define MPSTACK 512 -static struct MP* mp;  /* The MP floating point structure */ +static struct MP* mp;  // The MP floating point structure  static uint32_t *lapicaddr;  static struct cpu { -  uint8_t apicid;       /* Local APIC ID */ -  int lintr[2];		/* Local APIC */ +  uint8_t apicid;       // Local APIC ID +  int lintr[2];		// Local APIC +  char mpstack[MPSTACK]; // per-cpu start-up stack, only used to get into main()  } cpus[NCPU];  static int ncpu;  static struct cpu *bcpu; -// per-cpu start-up stack, only used to get into main() -#define MPSTACK 512 -char mpstacks[NCPU * MPSTACK]; -  static int  lapic_read(int r)  { @@ -361,7 +359,7 @@ mp_init()      if (cpus+c == bcpu) continue;      cprintf ("starting processor %d\n", c);      release_grant_spinlock(&kernel_lock, c); -    *(unsigned *)(APBOOTCODE-4) = (unsigned) mpstacks + (c + 1) * MPSTACK; // tell it what to use for %esp +    *(unsigned *)(APBOOTCODE-4) = (unsigned) (cpus[c].mpstack) + MPSTACK; // tell it what to use for %esp      *(unsigned *)(APBOOTCODE-8) = (unsigned)&main; // tell it where to jump to      lapic_startap(cpus + c, (uint32_t) APBOOTCODE);      acquire_spinlock(&kernel_lock); | 
