]> Devi Nivas Git - cs3210-lab0.git/commitdiff
mp: do not panic on surprising hw
authorRuss Cox <rsc@swtch.com>
Tue, 11 Jan 2011 18:16:28 +0000 (13:16 -0500)
committerRuss Cox <rsc@swtch.com>
Tue, 11 Jan 2011 18:16:28 +0000 (13:16 -0500)
mp.c

diff --git a/mp.c b/mp.c
index edabdd6988c8a9458f8598ae045a89d5b2ea25d3..44ee020a3f46f503b104f484c329cdf2dc5ebd6f 100644 (file)
--- a/mp.c
+++ b/mp.c
@@ -113,9 +113,10 @@ mpinit(void)
     switch(*p){
     case MPPROC:
       proc = (struct mpproc*)p;
+      cprintf("mpproc %d\n", proc->apicid);
       if(ncpu != proc->apicid){
-        cprintf("mpinit: ncpu=%d apicpid=%d\n", ncpu, proc->apicid);
-        panic("mpinit");
+        cprintf("mpinit: ncpu=%d apicid=%d\n", ncpu, proc->apicid);
+        ismp = 0;
       }
       if(proc->flags & MPBOOT)
         bcpu = &cpus[ncpu];
@@ -135,9 +136,17 @@ mpinit(void)
       continue;
     default:
       cprintf("mpinit: unknown config type %x\n", *p);
-      panic("mpinit");
+      ismp = 0;
     }
   }
+  if(!ismp){
+    // Didn't like what we found; fall back to no MP.
+    ncpu = 1;
+    lapic = 0;
+    ioapicid = 0;
+    return;
+  }
+
   if(mp->imcrp){
     // Bochs doesn't support IMCR, so this doesn't run on Bochs.
     // But it would on real hardware.