summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2017-03-11 16:24:56 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2017-03-11 16:24:56 +0100
commit5104934135feec1bfb2c1543028fe40bb4a41573 (patch)
treef19638bba87a79c19b88f99961ab3dec9159ac28 /sys
parent812383473cea9b53cf3c8ff138489a3d10d65f44 (diff)
pc kernel: avoid AP's spinning in syncclock(), don't wait for thunderbirdsargo
Diffstat (limited to 'sys')
-rw-r--r--sys/src/9/pc/squidboy.c23
-rw-r--r--sys/src/9/pc64/squidboy.c19
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);
}