|
@@ -4268,11 +4268,10 @@ void rt_mutex_setprio(struct task_struct *p, int prio)
|
|
oldprio = p->prio;
|
|
oldprio = p->prio;
|
|
on_rq = p->se.on_rq;
|
|
on_rq = p->se.on_rq;
|
|
running = task_current(rq, p);
|
|
running = task_current(rq, p);
|
|
- if (on_rq) {
|
|
|
|
|
|
+ if (on_rq)
|
|
dequeue_task(rq, p, 0);
|
|
dequeue_task(rq, p, 0);
|
|
- if (running)
|
|
|
|
- p->sched_class->put_prev_task(rq, p);
|
|
|
|
- }
|
|
|
|
|
|
+ if (running)
|
|
|
|
+ p->sched_class->put_prev_task(rq, p);
|
|
|
|
|
|
if (rt_prio(prio))
|
|
if (rt_prio(prio))
|
|
p->sched_class = &rt_sched_class;
|
|
p->sched_class = &rt_sched_class;
|
|
@@ -4281,10 +4280,9 @@ void rt_mutex_setprio(struct task_struct *p, int prio)
|
|
|
|
|
|
p->prio = prio;
|
|
p->prio = prio;
|
|
|
|
|
|
|
|
+ if (running)
|
|
|
|
+ p->sched_class->set_curr_task(rq);
|
|
if (on_rq) {
|
|
if (on_rq) {
|
|
- if (running)
|
|
|
|
- p->sched_class->set_curr_task(rq);
|
|
|
|
-
|
|
|
|
enqueue_task(rq, p, 0);
|
|
enqueue_task(rq, p, 0);
|
|
|
|
|
|
check_class_changed(rq, p, prev_class, oldprio, running);
|
|
check_class_changed(rq, p, prev_class, oldprio, running);
|
|
@@ -4581,19 +4579,17 @@ recheck:
|
|
update_rq_clock(rq);
|
|
update_rq_clock(rq);
|
|
on_rq = p->se.on_rq;
|
|
on_rq = p->se.on_rq;
|
|
running = task_current(rq, p);
|
|
running = task_current(rq, p);
|
|
- if (on_rq) {
|
|
|
|
|
|
+ if (on_rq)
|
|
deactivate_task(rq, p, 0);
|
|
deactivate_task(rq, p, 0);
|
|
- if (running)
|
|
|
|
- p->sched_class->put_prev_task(rq, p);
|
|
|
|
- }
|
|
|
|
|
|
+ if (running)
|
|
|
|
+ p->sched_class->put_prev_task(rq, p);
|
|
|
|
|
|
oldprio = p->prio;
|
|
oldprio = p->prio;
|
|
__setscheduler(rq, p, policy, param->sched_priority);
|
|
__setscheduler(rq, p, policy, param->sched_priority);
|
|
|
|
|
|
|
|
+ if (running)
|
|
|
|
+ p->sched_class->set_curr_task(rq);
|
|
if (on_rq) {
|
|
if (on_rq) {
|
|
- if (running)
|
|
|
|
- p->sched_class->set_curr_task(rq);
|
|
|
|
-
|
|
|
|
activate_task(rq, p, 0);
|
|
activate_task(rq, p, 0);
|
|
|
|
|
|
check_class_changed(rq, p, prev_class, oldprio, running);
|
|
check_class_changed(rq, p, prev_class, oldprio, running);
|
|
@@ -7618,11 +7614,10 @@ void sched_move_task(struct task_struct *tsk)
|
|
running = task_current(rq, tsk);
|
|
running = task_current(rq, tsk);
|
|
on_rq = tsk->se.on_rq;
|
|
on_rq = tsk->se.on_rq;
|
|
|
|
|
|
- if (on_rq) {
|
|
|
|
|
|
+ if (on_rq)
|
|
dequeue_task(rq, tsk, 0);
|
|
dequeue_task(rq, tsk, 0);
|
|
- if (unlikely(running))
|
|
|
|
- tsk->sched_class->put_prev_task(rq, tsk);
|
|
|
|
- }
|
|
|
|
|
|
+ if (unlikely(running))
|
|
|
|
+ tsk->sched_class->put_prev_task(rq, tsk);
|
|
|
|
|
|
set_task_rq(tsk, task_cpu(tsk));
|
|
set_task_rq(tsk, task_cpu(tsk));
|
|
|
|
|
|
@@ -7631,11 +7626,10 @@ void sched_move_task(struct task_struct *tsk)
|
|
tsk->sched_class->moved_group(tsk);
|
|
tsk->sched_class->moved_group(tsk);
|
|
#endif
|
|
#endif
|
|
|
|
|
|
- if (on_rq) {
|
|
|
|
- if (unlikely(running))
|
|
|
|
- tsk->sched_class->set_curr_task(rq);
|
|
|
|
|
|
+ if (unlikely(running))
|
|
|
|
+ tsk->sched_class->set_curr_task(rq);
|
|
|
|
+ if (on_rq)
|
|
enqueue_task(rq, tsk, 0);
|
|
enqueue_task(rq, tsk, 0);
|
|
- }
|
|
|
|
|
|
|
|
task_rq_unlock(rq, &flags);
|
|
task_rq_unlock(rq, &flags);
|
|
}
|
|
}
|