From 6343f85af2ca19862ed10c4fbf31ab7bb5e4a29f Mon Sep 17 00:00:00 2001 From: YOSHIFUJI Hideaki Date: Sat, 29 Oct 2005 18:15:42 -0700 Subject: [PATCH] --- yaml --- r: 11315 b: refs/heads/master c: 4b8f573b5db02a3017afbba49026a6aef480174f h: refs/heads/master i: 11313: 4d832d12383115552b3440cac2ee42ba64d36604 11311: ff3e0f9bef0f3a6c6f7c0c1282e91c78b599aeff v: v3 --- [refs] | 2 +- trunk/kernel/timer.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 4fc91a5f6201..370b07164664 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 930fc45a49ddebe7555cc5c837d82b9c27e65ff4 +refs/heads/master: 4b8f573b5db02a3017afbba49026a6aef480174f diff --git a/trunk/kernel/timer.c b/trunk/kernel/timer.c index 3ba10fa35b60..6a2e5f8dc725 100644 --- a/trunk/kernel/timer.c +++ b/trunk/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)