Commit 32717367 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] fix lost-tick compensation corner-case

From: john stultz <johnstul@us.ibm.com>

This patch catches a corner case in the lost-tick compensation code.

There is a check to see if we overflowed between reads of the two time
sources, however should the high res time source be slightly slower then
what we calibrated, its possible to trigger this code when no ticks have
been lost.

This patch adds an extra check to insure we have seen more then one tick
before we check for this overflow.  This seems to resolve the remaining
"time doubling" issues that I've seen reported.
parent 48ecce4b
...@@ -88,7 +88,7 @@ static void mark_offset_cyclone(void) ...@@ -88,7 +88,7 @@ static void mark_offset_cyclone(void)
* between cyclone and pit reads (as noted when * between cyclone and pit reads (as noted when
* usec delta is > 90% # of usecs/tick) * usec delta is > 90% # of usecs/tick)
*/ */
if (abs(delay - delay_at_last_interrupt) > (900000/HZ)) if (lost && abs(delay - delay_at_last_interrupt) > (900000/HZ))
jiffies++; jiffies++;
} }
......
...@@ -205,7 +205,7 @@ static void mark_offset_tsc(void) ...@@ -205,7 +205,7 @@ static void mark_offset_tsc(void)
* between tsc and pit reads (as noted when * between tsc and pit reads (as noted when
* usec delta is > 90% # of usecs/tick) * usec delta is > 90% # of usecs/tick)
*/ */
if (abs(delay - delay_at_last_interrupt) > (900000/HZ)) if (lost && abs(delay - delay_at_last_interrupt) > (900000/HZ))
jiffies++; jiffies++;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment