From 17da3e3ff418849d2176a2f1ea6ef8bdbea0fa4c Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Thu, 20 Jun 2013 02:30:17 +0200 Subject: [PATCH] disable tscticks in pc kernel (for now) doesnt seem to be reliable. also, separate tsc frequency measurement and cpu loopconst measurement. turned out with *notsc=, the simplcycles() calls would mess up loopconst. --- sys/src/9/pc/archacpi.c | 2 -- sys/src/9/pc/archmp.c | 3 --- sys/src/9/pc/i8253.c | 28 +++++++++++++++++++--------- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/sys/src/9/pc/archacpi.c b/sys/src/9/pc/archacpi.c index 24b3245bc..298709847 100644 --- a/sys/src/9/pc/archacpi.c +++ b/sys/src/9/pc/archacpi.c @@ -519,7 +519,5 @@ identify(void) return 1; if((cp = getconf("*nomp")) != nil && strcmp(cp, "0") != 0) return 1; - if(m->havetsc) - archacpi.fastclock = tscticks; return 0; } diff --git a/sys/src/9/pc/archmp.c b/sys/src/9/pc/archmp.c index 23cf4fa66..354249f38 100644 --- a/sys/src/9/pc/archmp.c +++ b/sys/src/9/pc/archmp.c @@ -395,8 +395,5 @@ identify(void) return 1; } - if(m->havetsc) - archmp.fastclock = tscticks; - return 0; } diff --git a/sys/src/9/pc/i8253.c b/sys/src/9/pc/i8253.c index 1ae22615f..46e59f5c4 100644 --- a/sys/src/9/pc/i8253.c +++ b/sys/src/9/pc/i8253.c @@ -145,12 +145,10 @@ guesscpuhz(int aalcycles) * */ outb(Tmode, Latch2); - cycles(&a); x = inb(T2cntr); x |= inb(T2cntr)<<8; aamloop(loops); outb(Tmode, Latch2); - cycles(&b); y = inb(T2cntr); y |= inb(T2cntr)<<8; @@ -174,13 +172,25 @@ guesscpuhz(int aalcycles) cpufreq = (vlong)loops*((aalcycles*2*Freq)/x); m->loopconst = (cpufreq/1000)/aalcycles; /* AAM+LOOP's for 1 ms */ - /* a == b means virtualbox has confused us */ - if(m->havetsc && b > a){ - b -= a; - b *= 2*Freq; - b /= x; - m->cyclefreq = b; - cpufreq = b; + if(m->havetsc){ + aamloop(loops); /* warm up */ + cycles(&a); + aamloop(loops); + cycles(&b); + + aamloop(loops); + cycles(&a); + aamloop(loops); + cycles(&b); + + /* a == b means virtualbox has confused us */ + if(b > a){ + b -= a; + b *= 2*Freq; + b /= x; + m->cyclefreq = b; + cpufreq = b; + } } m->cpuhz = cpufreq;