• Thomas Gleixner's avatar
    NOHZ: reevaluate idle sleep length after add_timer_on() · 06d8308c
    Thomas Gleixner authored
    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: default avatarThomas Gleixner <tglx@linutronix.de>
    Acked-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    Acked-by: default avatarIngo 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(-)
    06d8308c
timer.c 36.6 KB