Skip to content
Snippets Groups Projects
Commit a44ee3cd authored by kaashoek's avatar kaashoek
Browse files

stick mpstack in cpu structure

parent bf390361
No related branches found
No related tags found
No related merge requests found
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment