• Xunlei Pang's avatar
    sched/rt, sched/dl: Don't push if task's scheduling class was changed · 13b5ab02
    Xunlei Pang authored
    We got this warning:
    
        WARNING: CPU: 1 PID: 2468 at kernel/sched/core.c:1161 set_task_cpu+0x1af/0x1c0
        [...]
        Call Trace:
    
        dump_stack+0x63/0x87
        __warn+0xd1/0xf0
        warn_slowpath_null+0x1d/0x20
        set_task_cpu+0x1af/0x1c0
        push_dl_task.part.34+0xea/0x180
        push_dl_tasks+0x17/0x30
        __balance_callback+0x45/0x5c
        __sched_setscheduler+0x906/0xb90
        SyS_sched_setattr+0x150/0x190
        do_syscall_64+0x62/0x110
        entry_SYSCALL64_slow_path+0x25/0x25
    
    This corresponds to:
    
        WARN_ON_ONCE(p->state == TASK_RUNNING &&
                 p->sched_class == &fair_sched_class &&
                 (p->on_rq && !task_on_rq_migrating(p)))
    
    It happens because in find_lock_later_rq(), the task whose scheduling
    class was changed to fair class is still pushed away as if it were
    a deadline task ...
    
    So, check in find_lock_later_rq() after double_lock_balance(), if the
    scheduling class of the deadline task was changed, break and retry.
    
    Apply the same logic to RT tasks.
    Signed-off-by: default avatarXunlei Pang <xlpang@redhat.com>
    Reviewed-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    Acked-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Juri Lelli <juri.lelli@arm.com>
    Link: http://lkml.kernel.org/r/1462767091-1215-1-git-send-email-xlpang@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    13b5ab02
rt.c 54.1 KB