diff options
| author | Russ Cox <rsc@swtch.com> | 2011-01-11 13:16:28 -0500 | 
|---|---|---|
| committer | Russ Cox <rsc@swtch.com> | 2011-01-11 13:16:28 -0500 | 
| commit | af6a6a477531aefa6e961c464de495e0c09af673 (patch) | |
| tree | d380923283c5828e8024a57aa9e18bec9b6d3030 | |
| parent | 1a81e38b17144624415d252a521fd5a06079d681 (diff) | |
| download | xv6-labs-af6a6a477531aefa6e961c464de495e0c09af673.tar.gz xv6-labs-af6a6a477531aefa6e961c464de495e0c09af673.tar.bz2 xv6-labs-af6a6a477531aefa6e961c464de495e0c09af673.zip | |
mp: do not panic on surprising hw
| -rw-r--r-- | mp.c | 15 | 
1 files changed, 12 insertions, 3 deletions
| @@ -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. | 
