diff options
author | Venki Pallipadi <venkatesh.pallipadi@intel.com> | 2007-05-08 03:27:44 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-08 14:15:05 -0400 |
commit | 6e453a67510a17f01b63835f18569e8c3939a38c (patch) | |
tree | 2cbc50f434cf4397d2f279480ea2c2a87defa9b0 /include/linux/timer.h | |
parent | da6752964290567a6b4ea180d1becda75e810e87 (diff) |
Add support for deferrable timers
Introduce a new flag for timers - deferrable: Timers that work normally
when system is busy. But, will not cause CPU to come out of idle (just to
service this timer), when CPU is idle. Instead, this timer will be
serviced when CPU eventually wakes up with a subsequent non-deferrable
timer.
The main advantage of this is to avoid unnecessary timer interrupts when
CPU is idle. If the routine currently called by a timer can wait until
next event without any issues, this new timer can be used to setup timer
event for that routine. This, with dynticks, allows CPUs to be lazy,
allowing them to stay in idle for extended period of time by reducing
unnecesary wakeup and thereby reducing the power consumption.
This patch:
Builds this new timer on top of existing timer infrastructure. It uses
last bit in 'base' pointer of timer_list structure to store this deferrable
timer flag. __next_timer_interrupt() function skips over these deferrable
timers when CPU looks for next timer event for which it has to wake up.
This is exported by a new interface init_timer_deferrable() that can be
called in place of regular init_timer().
[akpm@linux-foundation.org: Privatise a #define]
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Oleg Nesterov <oleg@tv-sign.ru>
Cc: Dave Jones <davej@codemonkey.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux/timer.h')
-rw-r--r-- | include/linux/timer.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/timer.h b/include/linux/timer.h index 719113b652dd..e0c5c16c992f 100644 --- a/include/linux/timer.h +++ b/include/linux/timer.h | |||
@@ -37,6 +37,7 @@ extern struct tvec_t_base_s boot_tvec_bases; | |||
37 | TIMER_INITIALIZER(_function, _expires, _data) | 37 | TIMER_INITIALIZER(_function, _expires, _data) |
38 | 38 | ||
39 | void fastcall init_timer(struct timer_list * timer); | 39 | void fastcall init_timer(struct timer_list * timer); |
40 | void fastcall init_timer_deferrable(struct timer_list *timer); | ||
40 | 41 | ||
41 | static inline void setup_timer(struct timer_list * timer, | 42 | static inline void setup_timer(struct timer_list * timer, |
42 | void (*function)(unsigned long), | 43 | void (*function)(unsigned long), |