X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=kernel%2Ftimer.c;h=6a2e5f8dc725ffea0b73bb60036838b6ca628c5f;hb=4b8f573b5db02a3017afbba49026a6aef480174f;hp=3ba10fa35b607fd8a3c6d0db86f104c767df6604;hpb=930fc45a49ddebe7555cc5c837d82b9c27e65ff4;p=linux-2.6 diff --git a/kernel/timer.c b/kernel/timer.c index 3ba10fa35b..6a2e5f8dc7 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -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)