From: Avi Kivity timer_interrupt() measures the delay from an interrupt to its handling in a variable called 'delay', but accounts every unit of delay as 1/HZ seconds, instead of 1/CLOCK_TICK_RATE seconds. on ordinary cpus this doesn't matter as delay is usually zero, but on my 10MHz bochs cpu this causes divide overflows later on. Signed-off-by: Avi Kivity Signed-off-by: Andrew Morton --- 25-akpm/arch/x86_64/kernel/time.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN arch/x86_64/kernel/time.c~x86_64-fix-pit-delay-accounting-in-timer_interrupt arch/x86_64/kernel/time.c --- 25/arch/x86_64/kernel/time.c~x86_64-fix-pit-delay-accounting-in-timer_interrupt Wed Mar 2 15:19:17 2005 +++ 25-akpm/arch/x86_64/kernel/time.c Wed Mar 2 15:19:17 2005 @@ -410,7 +410,7 @@ static irqreturn_t timer_interrupt(int i monotonic_base += (tsc - vxtime.last_tsc)*1000000/cpu_khz ; - vxtime.last_tsc = tsc - vxtime.quot * delay / vxtime.tsc_quot; + vxtime.last_tsc = tsc - vxtime.quot * delay / (LATCH * vxtime.tsc_quot); if ((((tsc - vxtime.last_tsc) * vxtime.tsc_quot) >> 32) < offset) _