aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2006-03-26 01:38:05 -0800
committerLinus Torvalds <torvalds@g5.osdl.org>2006-03-26 08:57:02 -0800
commit92127c7a45d4d167d9b015a5f9de6b41ed66f1d0 (patch)
tree4742cc36ff0b26c999365d1e84133886bb694096 /include
parenta0e9285233a32edf267d27cd03fe0056951422cf (diff)
downloadlinux-92127c7a45d4d167d9b015a5f9de6b41ed66f1d0.tar.gz
[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>
Diffstat (limited to 'include')
-rw-r--r--include/linux/hrtimer.h20
1 files changed, 12 insertions, 8 deletions
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h
index 6401c31d6add4e..64e2754ca73426 100644
--- a/include/linux/hrtimer.h
+++ b/include/linux/hrtimer.h
@@ -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;
};
/*