From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752931AbcGUOqU (ORCPT ); Thu, 21 Jul 2016 10:46:20 -0400 Received: from foss.arm.com ([217.140.101.70]:48553 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751751AbcGUOqR (ORCPT ); Thu, 21 Jul 2016 10:46:17 -0400 Date: Thu, 21 Jul 2016 15:46:14 +0100 From: Juri Lelli To: xlpang@redhat.com Cc: peterz@infradead.org, rostedt@goodmis.org, linux-kernel@vger.kernel.org, mingo@redhat.com, luca.abeni@unitn.it Subject: Re: [PATCH v4] sched/deadline: remove useless param from setup_new_dl_entity Message-ID: <20160721144614.GJ30584@e106622-lin> References: <1468407489-30476-1-git-send-email-juri.lelli@arm.com> <5788BD67.5050509@redhat.com> <20160718130441.GH30141@e106622-lin> <578CDB83.1030702@redhat.com> <20160721142106.GH30584@e106622-lin> <20160721143645.GI30584@e106622-lin> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160721143645.GI30584@e106622-lin> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 21/07/16 15:36, Juri Lelli wrote: > On 21/07/16 15:21, Juri Lelli wrote: > > Hi, > > > > On 18/07/16 21:37, Xunlei Pang wrote: > > > On 2016/07/18 at 21:04, Juri Lelli wrote: > > > > On 15/07/16 18:39, Xunlei Pang wrote: > > > >> On 2016/07/13 at 18:58, Juri Lelli wrote: > > > > [...] > > > > > > > >> Since this is only called for queued cases now, there is no need to > > > >> check boosted stuff here. As enqueue_task(ENQUEUE_REPLENISH) > > > >> is called before check_class_changed() in rt_mutex_setprio(). > > > >> > > > > But we don't do the same in setscheduler, right? > > > > > > If p is deadline PI-boosted, setscheduler() won't call change its sched_class. > > > If p isn't deadline PI-boosted, then pi_task is NULL. > > > > > > So, I think the added code won't hit. Did I miss something? > > > > > > > No, I think you are right. > > > > Oh, and we need to filter the call after rt_mutex_setprio has > already issued a replenishment. > Does something like this on top of v4 make sense? --- kernel/sched/deadline.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index dc56f5be0112..6f05ac78711c 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -350,9 +350,8 @@ static inline void setup_new_dl_entity(struct sched_dl_entity *dl_se) { struct dl_rq *dl_rq = dl_rq_of_se(dl_se); struct rq *rq = rq_of_dl_rq(dl_rq); - struct task_struct *pi_task; - struct sched_dl_entity *pi_se = dl_se; + WARN_ON(dl_se->dl_boosted); WARN_ON(dl_time_before(rq_clock(rq), dl_se->deadline)); /* @@ -364,21 +363,12 @@ static inline void setup_new_dl_entity(struct sched_dl_entity *dl_se) return; /* - * Use the scheduling parameters of the top pi-waiter task, - * if we have one from which we can inherit a deadline. - */ - if (dl_se->dl_boosted && - (pi_task = rt_mutex_get_top_task(dl_task_of(dl_se))) && - dl_prio(pi_task->normal_prio)) - pi_se = &pi_task->dl; - - /* * We use the regular wall clock time to set deadlines in the * future; in fact, we must consider execution overheads (time * spent on hardirq context, etc.). */ - dl_se->deadline = rq_clock(rq) + pi_se->dl_deadline; - dl_se->runtime = pi_se->dl_runtime; + dl_se->deadline = rq_clock(rq) + dl_se->dl_deadline; + dl_se->runtime = dl_se->dl_runtime; } /* @@ -1734,9 +1724,11 @@ static void switched_to_dl(struct rq *rq, struct task_struct *p) if (task_on_rq_queued(p)) { /* * If p is not queued we will update its parameters at next - * wakeup. + * wakeup. If p is dl_boosted we already updated its params in + * rt_mutex_setprio()->enqueue_task(..., ENQUEUE_REPLENISH). */ - if (dl_time_before(p->dl.deadline, rq_clock(rq))) + if (dl_time_before(p->dl.deadline, rq_clock(rq)) && + !p->dl.dl_boosted) setup_new_dl_entity(&p->dl); if (rq->curr != p) { --