diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-06-20 02:30:17 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-06-20 02:30:17 +0200 |
commit | 17da3e3ff418849d2176a2f1ea6ef8bdbea0fa4c (patch) | |
tree | a1409c55cb1c9a99b1972ca6dce766ede5036cd0 /sys/src | |
parent | 8da4c8dcde68ca1da9b131cfcea917e781abf768 (diff) |
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.
Diffstat (limited to 'sys/src')
-rw-r--r-- | sys/src/9/pc/archacpi.c | 2 | ||||
-rw-r--r-- | sys/src/9/pc/archmp.c | 3 | ||||
-rw-r--r-- | 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; |