• Kirill Tkhai's avatar
    sched/dl: Fix race in dl_task_timer() · 0f397f2c
    Kirill Tkhai authored
    Throttled task is still on rq, and it may be moved to other cpu
    if user is playing with sched_setaffinity(). Therefore, unlocked
    task_rq() access makes the race.
    
    Juri Lelli reports he got this race when dl_bandwidth_enabled()
    was not set.
    
    Other thing, pointed by Peter Zijlstra:
    
       "Now I suppose the problem can still actually happen when
        you change the root domain and trigger a effective affinity
        change that way".
    
    To fix that we do the same as made in __task_rq_lock(). We do not
    use __task_rq_lock() itself, because it has a useful lockdep check,
    which is not correct in case of dl_task_timer(). We do not need
    pi_lock locked here. This case is an exception (PeterZ):
    
       "The only reason we don't strictly need ->pi_lock now is because
        we're guaranteed to have p->state == TASK_RUNNING here and are
        thus free of ttwu races".
    Signed-off-by: default avatarKirill Tkhai <tkhai@yandex.ru>
    Signed-off-by: default avatarPeter Zijlstra <peterz@infradead.org>
    Cc: <stable@vger.kernel.org> # v3.14+
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: http://lkml.kernel.org/r/3056991400578422@web14g.yandex.ruSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    0f397f2c
deadline.c 42.4 KB