summaryrefslogtreecommitdiff
path: root/mp.c
diff options
context:
space:
mode:
Diffstat (limited to 'mp.c')
-rw-r--r--mp.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/mp.c b/mp.c
index 393119d..e1edf24 100644
--- a/mp.c
+++ b/mp.c
@@ -103,20 +103,22 @@ mpinit(void)
struct mpproc *proc;
struct mpioapic *ioapic;
- bcpu = &cpus[ncpu];
+ bcpu = &cpus[0];
if((conf = mpconfig(&mp)) == 0)
return;
-
ismp = 1;
lapic = (uint*)conf->lapicaddr;
-
for(p=(uchar*)(conf+1), e=(uchar*)conf+conf->length; p<e; ){
switch(*p){
case MPPROC:
proc = (struct mpproc*)p;
- cpus[ncpu].apicid = proc->apicid;
+ if(ncpu != proc->apicid) {
+ cprintf("mpinit: ncpu=%d apicpid=%d", ncpu, proc->apicid);
+ panic("mpinit");
+ }
if(proc->flags & MPBOOT)
bcpu = &cpus[ncpu];
+ cpus[ncpu].id = ncpu;
ncpu++;
p += sizeof(struct mpproc);
continue;
@@ -135,7 +137,6 @@ mpinit(void)
panic("mpinit");
}
}
-
if(mp->imcrp){
// Bochs doesn't support IMCR, so this doesn't run on Bochs.
// But it would on real hardware.