summaryrefslogtreecommitdiff
path: root/sys/src
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2013-06-20 02:30:17 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2013-06-20 02:30:17 +0200
commit17da3e3ff418849d2176a2f1ea6ef8bdbea0fa4c (patch)
treea1409c55cb1c9a99b1972ca6dce766ede5036cd0 /sys/src
parent8da4c8dcde68ca1da9b131cfcea917e781abf768 (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.c2
-rw-r--r--sys/src/9/pc/archmp.c3
-rw-r--r--sys/src/9/pc/i8253.c28
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;