• T
    timers: Sanitize catchup_timer_jiffies() usage · 3bb475a3
    Thomas Gleixner 提交于
    catchup_timer_jiffies() has been applied blindly to several functions
    without looking for possible better ways to do it.
    
    1) internal_add_timer()
    
       Move the update to base->all_timers before we actually insert the
       timer into the wheel.
    
    2) detach_if_pending()
    
       Again the update to base->all_timers allows us to explicitely do
       the timer_jiffies update in place, if this was the last timer which
       got removed.
    
    3) __run_timers()
    
       We only check on entry, which is silly, because base->timer_jiffies
       can be behind - especially on NOHZ kernels - and if there is a
       single deferrable timer somewhere between base->timer_jiffies and
       jiffies we expire it and then loop until base->timer_jiffies ==
       jiffies.
    
       Move it into the loop.
    Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Paul McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Eric Dumazet <edumazet@google.com>
    Cc: Viresh Kumar <viresh.kumar@linaro.org>
    Cc: John Stultz <john.stultz@linaro.org>
    Cc: Joonwoo Park <joonwoop@codeaurora.org>
    Cc: Wenbo Wang <wenbo.wang@memblaze.com>
    Link: http://lkml.kernel.org/r/20150526224511.662994644@linutronix.deSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
    3bb475a3
timer.c 46.8 KB