From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751860AbaI3VEk (ORCPT ); Tue, 30 Sep 2014 17:04:40 -0400 Received: from forward4l.mail.yandex.net ([84.201.143.137]:47319 "EHLO forward4l.mail.yandex.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750846AbaI3VEi (ORCPT ); Tue, 30 Sep 2014 17:04:38 -0400 X-Yandex-Uniq: a33afdf6-fed3-44bd-be1c-0a04100c6b5a Authentication-Results: smtp14.mail.yandex.net; dkim=pass header.i=@yandex.ru Subject: [PATCH v2 2/3] sched/dl: Cleanup prio_changed_dl() From: Kirill Tkhai To: linux-kernel@vger.kernel.org Cc: Peter Zijlstra , Kirill Tkhai , Ingo Molnar , Juri Lelli Date: Wed, 01 Oct 2014 01:04:35 +0400 Message-ID: <20140930210428.5258.32223.stgit@localhost> In-Reply-To: <20140930210412.5258.35299.stgit@localhost> References: <20140930210412.5258.35299.stgit@localhost> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Kirill Tkhai 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 --- 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 = {