summaryrefslogtreecommitdiff
path: root/mp.c
diff options
context:
space:
mode:
authorkaashoek <kaashoek>2006-06-26 16:40:43 +0000
committerkaashoek <kaashoek>2006-06-26 16:40:43 +0000
commita44ee3cde8b55c314410210b9f3076797b9925fc (patch)
tree3b4c7bab7901d109198eaa3e213a2b0f016b4526 /mp.c
parentbf3903612d998ca8d95a48fb7cc0e5bfbe68f4c4 (diff)
downloadxv6-labs-a44ee3cde8b55c314410210b9f3076797b9925fc.tar.gz
xv6-labs-a44ee3cde8b55c314410210b9f3076797b9925fc.tar.bz2
xv6-labs-a44ee3cde8b55c314410210b9f3076797b9925fc.zip
stick mpstack in cpu structure
Diffstat (limited to 'mp.c')
-rw-r--r--mp.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/mp.c b/mp.c
index d4284dc..f267b8a 100644
--- a/mp.c
+++ b/mp.c
@@ -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);