diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-03-11 16:24:56 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-03-11 16:24:56 +0100 |
commit | 5104934135feec1bfb2c1543028fe40bb4a41573 (patch) | |
tree | f19638bba87a79c19b88f99961ab3dec9159ac28 | |
parent | 812383473cea9b53cf3c8ff138489a3d10d65f44 (diff) |
pc kernel: avoid AP's spinning in syncclock(), don't wait for thunderbirdsargo
-rw-r--r-- | sys/src/9/pc/squidboy.c | 23 | ||||
-rw-r--r-- | sys/src/9/pc64/squidboy.c | 19 |
2 files changed, 12 insertions, 30 deletions
diff --git a/sys/src/9/pc/squidboy.c b/sys/src/9/pc/squidboy.c index 85c3992d1..7a3501221 100644 --- a/sys/src/9/pc/squidboy.c +++ b/sys/src/9/pc/squidboy.c @@ -12,30 +12,17 @@ static void squidboy(Apic* apic) { // iprint("Hello Squidboy\n"); - machinit(); mmuinit(); - cpuidentify(); cpuidprint(); - + syncclock(); + active.machs[m->machno] = 1; apic->online = 1; - coherence(); - lapicinit(apic); lapiconline(); - syncclock(); timersinit(); - fpoff(); - - lock(&active); - active.machs[m->machno] = 1; - unlock(&active); - - while(!active.thunderbirdsarego) - microdelay(100); - schedinit(); } @@ -107,10 +94,12 @@ mpstartap(Apic* apic) nvramwrite(0x0F, 0x0A); /* shutdown code: warm reset upon init ipi */ lapicstartap(apic, PADDR(APBOOTSTRAP)); - for(i = 0; i < 1000; i++){ + for(i = 0; i < 100000; i++){ + if(arch->fastclock == tscticks) + cycles(&m->tscticks); /* for ap's syncclock(); */ if(apic->online) break; - delay(10); + delay(1); } nvramwrite(0x0F, 0x00); } diff --git a/sys/src/9/pc64/squidboy.c b/sys/src/9/pc64/squidboy.c index 218f4971a..4f923ca57 100644 --- a/sys/src/9/pc64/squidboy.c +++ b/sys/src/9/pc64/squidboy.c @@ -15,21 +15,12 @@ squidboy(Apic* apic) mmuinit(); cpuidentify(); cpuidprint(); + syncclock(); + active.machs[m->machno] = 1; apic->online = 1; - coherence(); - lapicinit(apic); lapiconline(); - syncclock(); timersinit(); - - lock(&active); - active.machs[m->machno] = 1; - unlock(&active); - - while(!active.thunderbirdsarego) - microdelay(100); - schedinit(); } @@ -102,10 +93,12 @@ mpstartap(Apic* apic) nvramwrite(0x0F, 0x0A); /* shutdown code: warm reset upon init ipi */ lapicstartap(apic, PADDR(APBOOTSTRAP)); - for(i = 0; i < 1000; i++){ + for(i = 0; i < 100000; i++){ + if(arch->fastclock == tscticks) + cycles(&m->tscticks); /* for ap's syncclock(); */ if(apic->online) break; - delay(10); + delay(1); } nvramwrite(0x0F, 0x00); } |