--- /sys/src/9k/k10/archk10.c +++ /sys/src/9k/k10/archk10.c @@ -361,7 +361,7 @@ microdelay(int microsecs) r = rdtsc(); for(t = r + m->cpumhz*microsecs; r < t; r = rdtsc()) - ; + pause(); } void @@ -371,5 +371,5 @@ millidelay(int millisecs) r = rdtsc(); for(t = r + m->cpumhz*1000ull*millisecs; r < t; r = rdtsc()) - ; + pause(); } --- /sys/src/9k/k10/devarch.c +++ /sys/src/9k/k10/devarch.c @@ -521,7 +521,7 @@ archreset(void) outb(0xcf9, i|0x06); /* RST_CPU transition */ for(;;) - ; + pause(); } /* --- /sys/src/9k/k10/fns.h +++ /sys/src/9k/k10/fns.h @@ -89,6 +89,7 @@ void outs(int, ushort); void outss(int, void*, int); void outl(int, ulong); void outsl(int, void*, int); +void pause(void); int pciscan(int, Pcidev**); ulong pcibarsize(Pcidev*, int); int pcicfgr8(Pcidev*, int); --- /sys/src/9k/k10/l64v.s +++ /sys/src/9k/k10/l64v.s @@ -409,6 +409,10 @@ TEXT setlabel(SB), 1, $-4 MOVL $0, AX /* return 0 */ RET +TEXT pause(SB), 1, $-4 + PAUSE + RET + TEXT halt(SB), 1, $-4 CLI CMPL nrdy(SB), $0 --- /sys/src/9k/k10/main.c +++ /sys/src/9k/k10/main.c @@ -130,7 +130,7 @@ squidboy(int apicno) * used by the spinning core. */ while(!m->online) - ; + pause(); apictimerenable(); apictprput(0);