1 #ifndef __LINUX_TIMER_WRAPPER_H
2 #define __LINUX_TIMER_WRAPPER_H 1
4 #include_next <linux/timer.h>
8 extern unsigned long volatile jiffies;
10 static inline void setup_timer(struct timer_list * timer,
11 void (*function)(unsigned long),
14 timer->function = function;
20 * __round_jiffies - function to round jiffies to a full second
21 * @j: the time in (absolute) jiffies that should be rounded
22 * @cpu: the processor number on which the timeout will happen
24 * __round_jiffies() rounds an absolute time in the future (in jiffies)
25 * up or down to (approximately) full seconds. This is useful for timers
26 * for which the exact time they fire does not matter too much, as long as
27 * they fire approximately every X seconds.
29 * By rounding these timers to whole seconds, all such timers will fire
30 * at the same time, rather than at various times spread out. The goal
31 * of this is to have the CPU wake up less, which saves power.
33 * The exact rounding is skewed for each processor to avoid all
34 * processors firing at the exact same time, which could lead
35 * to lock contention or spurious cache line bouncing.
37 * The return value is the rounded version of the @j parameter.
39 static inline unsigned long __round_jiffies(unsigned long j, int cpu)
42 unsigned long original = j;
45 * We don't want all cpus firing their timers at once hitting the
46 * same lock or cachelines, so we skew each extra cpu with an extra
47 * 3 jiffies. This 3 jiffies came originally from the mm/ code which
49 * The skew is done by adding 3*cpunr, then round, then subtract this
57 * If the target jiffie is just after a whole second (which can happen
58 * due to delays of the timer irq, long irq off times etc etc) then
59 * we should round down to the whole second, not up. Use 1/4th second
60 * as cutoff for this rounding as an extreme upper bound for this.
62 if (rem < HZ/4) /* round down */
67 /* now that we have rounded, subtract the extra skew again */
70 if (j <= jiffies) /* rounding ate our timeout entirely; */
77 * round_jiffies - function to round jiffies to a full second
78 * @j: the time in (absolute) jiffies that should be rounded
80 * round_jiffies() rounds an absolute time in the future (in jiffies)
81 * up or down to (approximately) full seconds. This is useful for timers
82 * for which the exact time they fire does not matter too much, as long as
83 * they fire approximately every X seconds.
85 * By rounding these timers to whole seconds, all such timers will fire
86 * at the same time, rather than at various times spread out. The goal
87 * of this is to have the CPU wake up less, which saves power.
89 * The return value is the rounded version of the @j parameter.
91 static inline unsigned long round_jiffies(unsigned long j)
93 return __round_jiffies(j, 0); // FIXME