lkml.org 
[lkml]   [2016]   [Sep]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH RT 1/7] timers: wakeup all timer waiters
    3.4.112-rt144-rc1 stable review patch.
    If anyone has any objections, please let me know.

    ------------------

    From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>

    The base lock is dropped during the invocation if the timer. That means
    it is possible that we have one waiter while timer1 is running and once
    this one finished, we get another waiter while timer2 is running. Since
    we wake up only one waiter it is possible that we miss the other one.
    This will probably heal itself over time because most of the time we
    complete timers without an active wake up.
    To avoid the scenario where we don't wake up all waiters at once,
    wake_up_all() is used.

    Cc: stable-rt@vger.kernel.org
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    kernel/timer.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/kernel/timer.c b/kernel/timer.c
    index c9b100922747..4954adeff38c 100644
    --- a/kernel/timer.c
    +++ b/kernel/timer.c
    @@ -978,7 +978,7 @@ static void wait_for_running_timer(struct timer_list *timer)
    base->running_timer != timer);
    }

    -# define wakeup_timer_waiters(b) wake_up(&(b)->wait_for_running_timer)
    +# define wakeup_timer_waiters(b) wake_up_all(&(b)->wait_for_running_timer)
    #else
    static inline void wait_for_running_timer(struct timer_list *timer)
    {
    --
    2.8.1

    \
     
     \ /
      Last update: 2016-09-23 18:50    [W:2.916 / U:0.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site