Messages in this thread Patch in this message | | | Subject | [PATCH v2 2/3] sched/dl: Cleanup prio_changed_dl() | From | Kirill Tkhai <> | Date | Wed, 01 Oct 2014 01:04:35 +0400 |
| |
From: Kirill Tkhai <ktkhai@parallels.com>
rq->curr task can't be in "dequeued" state in prio_changed_dl(). (The only place we can have that is __schedule()). So, we delete rq->curr check.
Also delete "else" branch which is dead code (switched_to_dl() is not interested in dequeued tasks and we are not interested in balancing in this case).
Signed-off-by: Kirill Tkhai <ktkhai@parallels.com> --- kernel/sched/deadline.c | 50 +++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 26 deletions(-)
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index 63f8b4a..38b4f19 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -1638,35 +1638,33 @@ static void switched_to_dl(struct rq *rq, struct task_struct *p) static void prio_changed_dl(struct rq *rq, struct task_struct *p, int oldprio) { - if (task_on_rq_queued(p) || rq->curr == p) { + if (!task_on_rq_queued(p)) + return; #ifdef CONFIG_SMP - /* - * This might be too much, but unfortunately - * we don't have the old deadline value, and - * we can't argue if the task is increasing - * or lowering its prio, so... - */ - if (!rq->dl.overloaded) - pull_dl_task(rq); - - /* - * If we now have a earlier deadline task than p, - * then reschedule, provided p is still on this - * runqueue. - */ - if (dl_time_before(rq->dl.earliest_dl.curr, p->dl.deadline) && - rq->curr == p) - resched_curr(rq); -#else - /* - * Again, we don't know if p has a earlier - * or later deadline, so let's blindly set a - * (maybe not needed) rescheduling point. - */ + /* + * This might be too much, but unfortunately + * we don't have the old deadline value, and + * we can't argue if the task is increasing + * or lowering its prio, so... + */ + if (!rq->dl.overloaded) + pull_dl_task(rq); + /* + * If we now have a earlier deadline task than p, + * then reschedule, provided p is still on this + * runqueue. + */ + if (dl_time_before(rq->dl.earliest_dl.curr, p->dl.deadline) && + rq->curr == p) resched_curr(rq); +#else + /* + * Again, we don't know if p has a earlier + * or later deadline, so let's blindly set a + * (maybe not needed) rescheduling point. + */ + resched_curr(rq); #endif /* CONFIG_SMP */ - } else - switched_to_dl(rq, p); } const struct sched_class dl_sched_class = {
| |