提交 a44ee3cd 创建 作者: kaashoek's avatar kaashoek

stick mpstack in cpu structure

上级 bf390361
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
* mp.c puts the correct %esp in start-4, and the place to jump * mp.c puts the correct %esp in start-4, and the place to jump
* to in start-8. * to in start-8.
* *
* Credit: Cliff Frey * Credit: Cliff Frey and Plan 9
*/ */
.set PROT_MODE_CSEG,0x8 # code segment selector .set PROT_MODE_CSEG,0x8 # code segment selector
......
...@@ -91,20 +91,18 @@ enum { /* LAPIC_TDCR */ ...@@ -91,20 +91,18 @@ enum { /* LAPIC_TDCR */
}; };
#define APBOOTCODE 0x7000 // XXX hack #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 uint32_t *lapicaddr;
static struct cpu { static struct cpu {
uint8_t apicid; /* Local APIC ID */ uint8_t apicid; // Local APIC ID
int lintr[2]; /* Local APIC */ int lintr[2]; // Local APIC
char mpstack[MPSTACK]; // per-cpu start-up stack, only used to get into main()
} cpus[NCPU]; } cpus[NCPU];
static int ncpu; static int ncpu;
static struct cpu *bcpu; static struct cpu *bcpu;
// per-cpu start-up stack, only used to get into main()
#define MPSTACK 512
char mpstacks[NCPU * MPSTACK];
static int static int
lapic_read(int r) lapic_read(int r)
{ {
...@@ -361,7 +359,7 @@ mp_init() ...@@ -361,7 +359,7 @@ mp_init()
if (cpus+c == bcpu) continue; if (cpus+c == bcpu) continue;
cprintf ("starting processor %d\n", c); cprintf ("starting processor %d\n", c);
release_grant_spinlock(&kernel_lock, 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 *(unsigned *)(APBOOTCODE-8) = (unsigned)&main; // tell it where to jump to
lapic_startap(cpus + c, (uint32_t) APBOOTCODE); lapic_startap(cpus + c, (uint32_t) APBOOTCODE);
acquire_spinlock(&kernel_lock); acquire_spinlock(&kernel_lock);
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论