[PATCH] hrtimers: optimize softirq runqueues
The hrtimer softirq is called from the timer softirq every tick. Retrieve the current time from xtime and wall_to_monotonic instead of calling base->get_time() for each timer base. Store the time in the base structure and provide a hook once clock source abstractions are in place and to keep the code open for new base clocks. Based on a patch from: Roman Zippel <zippel@linux-m68k.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
a0e9285233
commit
92127c7a45
@@ -72,14 +72,16 @@ struct hrtimer {
|
||||
/**
|
||||
* struct hrtimer_base - the timer base for a specific clock
|
||||
*
|
||||
* @index: clock type index for per_cpu support when moving a timer
|
||||
* to a base on another cpu.
|
||||
* @lock: lock protecting the base and associated timers
|
||||
* @active: red black tree root node for the active timers
|
||||
* @first: pointer to the timer node which expires first
|
||||
* @resolution: the resolution of the clock, in nanoseconds
|
||||
* @get_time: function to retrieve the current time of the clock
|
||||
* @curr_timer: the timer which is executing a callback right now
|
||||
* @index: clock type index for per_cpu support when moving a timer
|
||||
* to a base on another cpu.
|
||||
* @lock: lock protecting the base and associated timers
|
||||
* @active: red black tree root node for the active timers
|
||||
* @first: pointer to the timer node which expires first
|
||||
* @resolution: the resolution of the clock, in nanoseconds
|
||||
* @get_time: function to retrieve the current time of the clock
|
||||
* @get_sofirq_time: function to retrieve the current time from the softirq
|
||||
* @curr_timer: the timer which is executing a callback right now
|
||||
* @softirq_time: the time when running the hrtimer queue in the softirq
|
||||
*/
|
||||
struct hrtimer_base {
|
||||
clockid_t index;
|
||||
@@ -88,7 +90,9 @@ struct hrtimer_base {
|
||||
struct rb_node *first;
|
||||
ktime_t resolution;
|
||||
ktime_t (*get_time)(void);
|
||||
ktime_t (*get_softirq_time)(void);
|
||||
struct hrtimer *curr_timer;
|
||||
ktime_t softirq_time;
|
||||
};
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user