• Steven Rostedt's avatar
    sched: Fix broken setscheduler() · 383afd09
    Steven Rostedt authored
    I decided to run my tests on linux-next, and my wakeup_rt tracer was
    broken. After running a bisect, I found that the problem commit was:
    
       linux-next commit c365c292
       "sched: Consider pi boosting in setscheduler()"
    
    And the reason the wake_rt tracer test was failing, was because it had
    no RT task to trace. I first noticed this when running with
    sched_switch event and saw that my RT task still had normal SCHED_OTHER
    priority. Looking at the problem commit, I found:
    
     -       p->normal_prio = normal_prio(p);
     -       p->prio = rt_mutex_getprio(p);
    
    With no
    
     +       p->normal_prio = normal_prio(p);
     +       p->prio = rt_mutex_getprio(p);
    
    Reading what the commit is suppose to do, I realize that the p->prio
    can't be set if the task is boosted with a higher prio, but the
    p->normal_prio still needs to be set regardless, otherwise, when the
    task is deboosted, it wont get the new priority.
    
    The p->prio has to be set before "check_class_changed()" is called,
    otherwise the class wont be changed.
    
    Also added fix to newprio to include a check for deadline policy that
    was missing. This change was suggested by Juri Lelli.
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    Cc: SebastianAndrzej Siewior <bigeasy@linutronix.de>
    Cc: Juri Lelli <juri.lelli@gmail.com>
    Signed-off-by: default avatarPeter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/20140306120438.638bfe94@gandalf.local.homeSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    383afd09
core.c 190 KB