]> git.karo-electronics.de Git - karo-tx-linux.git/commit
NOHZ: reevaluate idle sleep length after add_timer_on()
authorThomas Gleixner <tglx@linutronix.de>
Wed, 26 Mar 2008 18:35:10 +0000 (18:35 +0000)
committerChris Wright <chrisw@sous-sol.org>
Sat, 19 Apr 2008 01:53:20 +0000 (18:53 -0700)
commite8f696e9daa00e52b9c7ad1822fcda354d0baabd
tree3145dbc9d024491af257121fc5b810b268e1f788
parent3d6fec02c6a996f658bdaa6a1da381f9b72da032
NOHZ: reevaluate idle sleep length after add_timer_on()

upstream commit: 06d8308c61e54346585b2691c13ee3f90cb6fb2f

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>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
--
 include/linux/sched.h |    6 ++++++
 kernel/sched.c        |   43 +++++++++++++++++++++++++++++++++++++++++++
 kernel/timer.c        |   10 +++++++++-
 3 files changed, 58 insertions(+), 1 deletion(-)
include/linux/sched.h
kernel/sched.c
kernel/timer.c