• Viresh Kumar's avatar
    timer: Spare IPI when deferrable timer is queued on idle remote targets · 8ba14654
    Viresh Kumar authored
    When a timer is enqueued or modified on a remote target, the latter is
    expected to see and handle this timer on its next tick. However if the
    target is idle and CONFIG_NO_HZ_IDLE=y, the CPU may be sleeping tickless
    and the timer may be ignored.
    
    wake_up_nohz_cpu() takes care of that by setting TIF_NEED_RESCHED and
    sending an IPI to idle targets so that the tick is reevaluated on the
    idle loop through the tick_nohz_idle_*() APIs.
    
    Now this is all performed regardless of the power properties of the
    timer. If the timer is deferrable, idle targets don't need to be woken
    up. Only the next buzy tick needs to care about it, and no IPI kick
    is needed for that to happen.
    
    So lets spare the IPI on idle targets when the timer is deferrable.
    
    Meanwhile we keep the current behaviour on full dynticks targets. We can
    spare IPIs on idle full dynticks targets as well but some tricky races
    against idle_cpu() must be dealt all along to make sure that the timer
    is well handled after idle exit. We can deal with that later since
    NO_HZ_FULL already has more important powersaving issues.
    Reported-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
    Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/CAKohpomMZ0TAN2e6N76_g4ZRzxd5vZ1XfuZfxrP7GMxfTNiLVw@mail.gmail.comSigned-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    8ba14654
timer.c 46.7 KB