From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752250AbcGVC65 (ORCPT ); Thu, 21 Jul 2016 22:58:57 -0400 Received: from mx1.redhat.com ([209.132.183.28]:60055 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751514AbcGVC6y (ORCPT ); Thu, 21 Jul 2016 22:58:54 -0400 Reply-To: xlpang@redhat.com Subject: Re: [PATCH v4] sched/deadline: remove useless param from setup_new_dl_entity 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> <20160721144614.GJ30584@e106622-lin> To: Juri Lelli , xlpang@redhat.com Cc: peterz@infradead.org, rostedt@goodmis.org, linux-kernel@vger.kernel.org, mingo@redhat.com, luca.abeni@unitn.it From: Xunlei Pang Message-ID: <57918BEF.2090400@redhat.com> Date: Fri, 22 Jul 2016 10:58:55 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <20160721144614.GJ30584@e106622-lin> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Fri, 22 Jul 2016 02:58:53 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2016/07/21 at 22:46, Juri Lelli wrote: > 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) Hi Juri, It looks good to me, only one question: For on_rq boosted to deadline, p->dl.deadline has been updated after rq_lock(rq) by rt_mutex_setprio()->enqueue_task(..., ENQUEUE_REPLENISH) and no rq clock update afterwards, so dl_time_before() will be false, seems p->dl.dl_boosted check is needless. Regards, Xunlei > setup_new_dl_entity(&p->dl); > > if (rq->curr != p) {