From: YOSHIFUJI Hideaki Add missing compensation for (HZ == 250) != (1 << SHIFT_HZ) in second_overflow(). Signed-off-by: YOSHIFUJI Hideaki Cc: "David S. Miller" Signed-off-by: Andrew Morton --- kernel/timer.c | 9 +++++++++ 1 files changed, 9 insertions(+) diff -puN kernel/timer.c~timers-add-missing-compensation-for-hz-==-250 kernel/timer.c --- devel/kernel/timer.c~timers-add-missing-compensation-for-hz-==-250 2005-10-16 20:28:19.000000000 -0700 +++ devel-akpm/kernel/timer.c 2005-10-16 20:28:19.000000000 -0700 @@ -752,6 +752,15 @@ static void second_overflow(void) else time_adj += (time_adj >> 2) + (time_adj >> 5); #endif +#if HZ == 250 + /* Compensate for (HZ==250) != (1 << SHIFT_HZ). + * Add 1.5625% and 0.78125% to get 255.85938; => only 0.05% error (p. 14) + */ + if (time_adj < 0) + time_adj -= (-time_adj >> 6) + (-time_adj >> 7); + else + time_adj += (time_adj >> 6) + (time_adj >> 7); +#endif #if HZ == 1000 /* Compensate for (HZ==1000) != (1 << SHIFT_HZ). * Add 1.5625% and 0.78125% to get 1023.4375; => only 0.05% error (p. 14) _