summaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2008-03-22 09:20:24 +0100
committerThomas Gleixner <tglx@linutronix.de>2008-03-26 08:28:55 +0100
commit06d8308c61e54346585b2691c13ee3f90cb6fb2f (patch)
treed522e285525964706e7ec112bca23d407a540a8e /init
parentclocksource: revert: use init_timer_deferrable for clocksource_watchdog (diff)
downloadlinux-06d8308c61e54346585b2691c13ee3f90cb6fb2f.tar.xz
linux-06d8308c61e54346585b2691c13ee3f90cb6fb2f.zip
NOHZ: reevaluate idle sleep length after add_timer_on()
add_timer_on() can add a timer on a CPU which is currently in a long idle sleep, but the timer wheel is not reevaluated by the nohz code on that CPU. So a timer can be delayed for quite a long time. This triggered a false positive in the clocksource watchdog code. To avoid this we need to wake up the idle CPU and enforce the reevaluation of the timer wheel for the next timer event. Add a function, which checks a given CPU for idle state, marks the idle task with NEED_RESCHED and sends a reschedule IPI to notify the other CPU of the change in the timer wheel. Call this function from add_timer_on(). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Acked-by: Ingo Molnar <mingo@elte.hu> Cc: stable@kernel.org -- include/linux/sched.h | 6 ++++++ kernel/sched.c | 43 +++++++++++++++++++++++++++++++++++++++++++ kernel/timer.c | 10 +++++++++- 3 files changed, 58 insertions(+), 1 deletion(-)
Diffstat (limited to '')
0 files changed, 0 insertions, 0 deletions