diff options
author | Frans Kaashoek <[email protected]> | 2011-07-27 20:49:45 -0400 |
---|---|---|
committer | Frans Kaashoek <[email protected]> | 2011-07-27 20:49:45 -0400 |
commit | dccb915282854476ce47752df6631dcce3b8f661 (patch) | |
tree | a84aa8ed35618f99c3d7e8cdd466d22ae7bad597 /mp.c | |
parent | 9acdfe0d04f3fcf95c6e392e08afb45bdfe16c20 (diff) | |
parent | 13a96baefc0ff5d8262c4bc8c797bee4b157443c (diff) | |
download | xv6-labs-dccb915282854476ce47752df6631dcce3b8f661.tar.gz xv6-labs-dccb915282854476ce47752df6631dcce3b8f661.tar.bz2 xv6-labs-dccb915282854476ce47752df6631dcce3b8f661.zip |
Merge commit 'origin/master' into page
Diffstat (limited to 'mp.c')
-rw-r--r-- | mp.c | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -39,7 +39,6 @@ mpsearch1(uchar *addr, int len) { uchar *e, *p; - cprintf("mpsearch1 0x%x %d\n", addr, len); e = addr+len; for(p = addr; p < e; p += sizeof(struct mp)) if(memcmp(p, "_MP_", 4) == 0 && sum(p, sizeof(struct mp)) == 0) @@ -113,9 +112,9 @@ mpinit(void) switch(*p){ case MPPROC: proc = (struct mpproc*)p; - if(ncpu != proc->apicid) { - cprintf("mpinit: ncpu=%d apicpid=%d", ncpu, proc->apicid); - panic("mpinit"); + if(ncpu != proc->apicid){ + cprintf("mpinit: ncpu=%d apicid=%d\n", ncpu, proc->apicid); + ismp = 0; } if(proc->flags & MPBOOT) bcpu = &cpus[ncpu]; @@ -135,9 +134,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. |