diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2008-01-25 15:08:31 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-01-25 15:08:31 -0500 |
commit | d3d74453c34f8fd87674a8cf5b8a327c68f22e99 (patch) | |
tree | cbbd46eb7b81f5c9d39a93604a206ac775084858 /kernel/timer.c | |
parent | 2d44ae4d7135b9aee26439b3523b43473381bc5f (diff) |
hrtimer: fixup the HRTIMER_CB_IRQSAFE_NO_SOFTIRQ fallback
Currently all highres=off timers are run from softirq context, but
HRTIMER_CB_IRQSAFE_NO_SOFTIRQ timers expect to run from irq context.
Fix this up by splitting it similar to the highres=on case.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/timer.c')
-rw-r--r-- | kernel/timer.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/timer.c b/kernel/timer.c index 2a00c22203f3..f739dfb539ce 100644 --- a/kernel/timer.c +++ b/kernel/timer.c | |||
@@ -896,7 +896,7 @@ static void run_timer_softirq(struct softirq_action *h) | |||
896 | { | 896 | { |
897 | tvec_base_t *base = __get_cpu_var(tvec_bases); | 897 | tvec_base_t *base = __get_cpu_var(tvec_bases); |
898 | 898 | ||
899 | hrtimer_run_queues(); | 899 | hrtimer_run_pending(); |
900 | 900 | ||
901 | if (time_after_eq(jiffies, base->timer_jiffies)) | 901 | if (time_after_eq(jiffies, base->timer_jiffies)) |
902 | __run_timers(base); | 902 | __run_timers(base); |
@@ -907,6 +907,7 @@ static void run_timer_softirq(struct softirq_action *h) | |||
907 | */ | 907 | */ |
908 | void run_local_timers(void) | 908 | void run_local_timers(void) |
909 | { | 909 | { |
910 | hrtimer_run_queues(); | ||
910 | raise_softirq(TIMER_SOFTIRQ); | 911 | raise_softirq(TIMER_SOFTIRQ); |
911 | softlockup_tick(); | 912 | softlockup_tick(); |
912 | } | 913 | } |