Jiffy based timers/timeouts can expire too soon.
From: David Vrabel
Date: Thu Dec 02 2004 - 11:17:08 EST
Hi,
Jiffy based timers and timeouts can expire too soon because the timer
interrupt accounts for lost ticks and can increment jiffies by more than 1.
Consider the following:
unsigned long timeout = jiffies + 1;
<--- timer interrupt here:
jiffies += 2 (i.e., catching up one missed interrupt)
if (time_after(jiffies, timeout))
/* but 1 tick worth of time hasn't (necessarily) elapsed */
This was originally observed on an ARM platform[1] but the i386 timer
interrupt appears to behave in a similar way.
Is this solution here to:
1. Not use jiffies for timers/timeouts with only a few ticks?
or
2. Have two independant "jiffies": the existing one which is used for
the wallclock only; and one which counts the number of timer interrupts
and will guarantee that timers don't expire prematurely?
or
3. Something else?
David Vrabel
[1]
http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel/2004-December/025695.html
--
David Vrabel, Design Engineer
Arcom, Clifton Road Tel: +44 (0)1223 411200 ext. 3233
Cambridge CB1 7EA, UK Web: http://www.arcom.com/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/