diff options
author | YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> | 2005-10-29 21:15:42 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-10-30 00:40:35 -0400 |
commit | 4b8f573b5db02a3017afbba49026a6aef480174f (patch) | |
tree | 4abf19125526809d4be44cb83373f85605854575 /kernel/timer.c | |
parent | 930fc45a49ddebe7555cc5c837d82b9c27e65ff4 (diff) |
[PATCH] TIMERS: add missing compensation for HZ == 250
Add missing compensation for (HZ == 250) != (1 << SHIFT_HZ) in
second_overflow().
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Cc: "David S. Miller" <davem@davemloft.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/timer.c')
-rw-r--r-- | kernel/timer.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/kernel/timer.c b/kernel/timer.c index 3ba10fa35b60..6a2e5f8dc725 100644 --- a/kernel/timer.c +++ b/kernel/timer.c | |||
@@ -752,6 +752,15 @@ static void second_overflow(void) | |||
752 | else | 752 | else |
753 | time_adj += (time_adj >> 2) + (time_adj >> 5); | 753 | time_adj += (time_adj >> 2) + (time_adj >> 5); |
754 | #endif | 754 | #endif |
755 | #if HZ == 250 | ||
756 | /* Compensate for (HZ==250) != (1 << SHIFT_HZ). | ||
757 | * Add 1.5625% and 0.78125% to get 255.85938; => only 0.05% error (p. 14) | ||
758 | */ | ||
759 | if (time_adj < 0) | ||
760 | time_adj -= (-time_adj >> 6) + (-time_adj >> 7); | ||
761 | else | ||
762 | time_adj += (time_adj >> 6) + (time_adj >> 7); | ||
763 | #endif | ||
755 | #if HZ == 1000 | 764 | #if HZ == 1000 |
756 | /* Compensate for (HZ==1000) != (1 << SHIFT_HZ). | 765 | /* Compensate for (HZ==1000) != (1 << SHIFT_HZ). |
757 | * Add 1.5625% and 0.78125% to get 1023.4375; => only 0.05% error (p. 14) | 766 | * Add 1.5625% and 0.78125% to get 1023.4375; => only 0.05% error (p. 14) |