From 8148b6ee535b85e97f3b5f3a850b70fdfbbcaf2d Mon Sep 17 00:00:00 2001 From: rtm Date: Wed, 12 Jul 2006 11:15:38 +0000 Subject: i think my cmpxchg use was wrong in acquire nesting cli/sti: release shouldn't always enable interrupts separate setup of lapic from starting of other cpus, so cpu() works earlier flag to disable locking in console output make locks work even when curproc==0 (still crashes in clock interrupt) --- mp.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'mp.c') diff --git a/mp.c b/mp.c index 4258aba..068d036 100644 --- a/mp.c +++ b/mp.c @@ -325,8 +325,6 @@ mp_init() struct MPCTB *mpctb; struct MPPE *proc; struct MPBE *bus; - int c; - extern int main(); int i; ncpu = 0; @@ -386,13 +384,20 @@ mp_init() lapic_init(bcpu-cpus); cprintf("ncpu: %d boot %d\n", ncpu, bcpu-cpus); +} +void +mp_startthem() +{ extern uint8_t _binary_bootother_start[], _binary_bootother_size[]; + extern int main(); + int c; + memmove((void *) APBOOTCODE,_binary_bootother_start, (uint32_t) _binary_bootother_size); for(c = 0; c < ncpu; c++){ - if (cpus+c == bcpu) continue; + if (c == cpu()) continue; cprintf ("starting processor %d\n", c); *(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 -- cgit v1.2.3