• Sebastian Andrzej Siewior's avatar
    sched/core: Schedule new worker even if PI-blocked · b0fdc013
    Sebastian Andrzej Siewior authored
    
    
    If a task is PI-blocked (blocking on sleeping spinlock) then we don't want to
    schedule a new kworker if we schedule out due to lock contention because !RT
    does not do that as well. A spinning spinlock disables preemption and a worker
    does not schedule out on lock contention (but spin).
    
    On RT the RW-semaphore implementation uses an rtmutex so
    tsk_is_pi_blocked() will return true if a task blocks on it. In this case we
    will now start a new worker which may deadlock if one worker is waiting on
    progress from another worker. Since a RW-semaphore starts a new worker on !RT,
    we should do the same on RT.
    
    XFS is able to trigger this deadlock.
    
    Allow to schedule new worker if the current worker is PI-blocked.
    
    Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/20190816160626.12742-1-bigeasy@linutronix.de
    
    
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    b0fdc013