summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-08-24 15:46:21 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2012-08-24 15:46:21 +0200
commitda01fdae11e470bf839edd610522ab6e0a56a096 (patch)
treeb54203429b173edf803260fc20f09cf855f95ee9
parentd436b2117e5c054c9977f80cae9c2302ed50a5a6 (diff)
guesscpuhz: add sanity checks for virtualbox (import from sources)
-rw-r--r--sys/src/9/pc/i8253.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/src/9/pc/i8253.c b/sys/src/9/pc/i8253.c
index 2e3ea2162..04af79edb 100644
--- a/sys/src/9/pc/i8253.c
+++ b/sys/src/9/pc/i8253.c
@@ -165,7 +165,7 @@ guesscpuhz(int aalcycles)
cpufreq = (vlong)loops*((aalcycles*2*Freq)/x);
m->loopconst = (cpufreq/1000)/aalcycles; /* AAM+LOOP's for 1 ms */
- if(m->havetsc){
+ if(m->havetsc && a != b){ /* a == b means virtualbox has confused us */
/* counter goes up by 2*Freq */
b = (b-a)<<1;
b *= Freq;
@@ -185,6 +185,9 @@ guesscpuhz(int aalcycles)
m->cpuhz = cpufreq;
}
+ /* don't divide by zero in trap.c */
+ if(m->cpumhz == 0)
+ panic("guesscpuhz: zero m->cpumhz");
i8253.hz = Freq<<Tickshift;
}