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/