From ae15515d80559ff95b315e3342c3baa00b87be1c Mon Sep 17 00:00:00 2001 From: Frans Kaashoek Date: Fri, 2 Sep 2016 08:31:13 -0400 Subject: APIC IDs may not be consecutive and start from zero, so we cannot really use it as a direct index into cpus. Record apicid in struct cpu and have cpunum() look for it. Replace cpu->id with cpunum() everywhere, and replace cpu->id with cpu->apicid. Thanks to Xi Wang. --- main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 2972b21..47c36cc 100644 --- a/main.c +++ b/main.c @@ -22,7 +22,7 @@ main(void) mpinit(); // detect other processors lapicinit(); // interrupt controller seginit(); // segment descriptors - cprintf("\ncpu%d: starting xv6\n\n", cpu->id); + cprintf("\ncpu%d: starting xv6\n\n", cpunum()); picinit(); // another interrupt controller ioapicinit(); // another interrupt controller consoleinit(); // console hardware @@ -54,7 +54,7 @@ mpenter(void) static void mpmain(void) { - cprintf("cpu%d: starting\n", cpu->id); + cprintf("cpu%d: starting\n", cpunum()); idtinit(); // load idt register xchg(&cpu->started, 1); // tell startothers() we're up scheduler(); // start running processes @@ -89,7 +89,7 @@ startothers(void) *(void**)(code-8) = mpenter; *(int**)(code-12) = (void *) V2P(entrypgdir); - lapicstartap(c->id, V2P(code)); + lapicstartap(c->apicid, V2P(code)); // wait for cpu to finish mpmain() while(c->started == 0) -- cgit v1.2.3