• Luca Abeni's avatar
    sched/deadline: Fix migration of SCHED_DEADLINE tasks · 5aa50507
    Luca Abeni authored
    Commit:
    
      9d514262 ("sched/deadline: Reduce rq lock contention by eliminating locking of non-feasible target")
    
    broke select_task_rq_dl() and find_lock_later_rq(), because it introduced
    a comparison between the local task's deadline and dl.earliest_dl.curr of
    the remote queue.
    
    However, if the remote runqueue does not contain any SCHED_DEADLINE
    task its earliest_dl.curr is 0 (always smaller than the deadline of
    the local task) and the remote runqueue is not selected for pushing.
    
    As a result, if an application creates multiple SCHED_DEADLINE
    threads, they will never be pushed to runqueues that do not already
    contain SCHED_DEADLINE tasks.
    
    This patch fixes the issue by checking if dl.dl_nr_running == 0.
    Signed-off-by: default avatarLuca Abeni <luca.abeni@unitn.it>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Juri Lelli <juri.lelli@arm.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Wanpeng Li <wanpeng.li@linux.intel.com>
    Fixes: 9d514262 ("sched/deadline: Reduce rq lock contention by eliminating locking of non-feasible target")
    Link: http://lkml.kernel.org/r/1444982781-15608-1-git-send-email-luca.abeni@unitn.itSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    5aa50507
deadline.c 47.1 KB