From patchwork Thu Jul 21 14:46:14 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Juri Lelli X-Patchwork-Id: 72571 Delivered-To: patch@linaro.org Received: by 10.140.29.52 with SMTP id a49csp481587qga; Thu, 21 Jul 2016 07:46:23 -0700 (PDT) X-Received: by 10.66.80.136 with SMTP id r8mr64887326pax.72.1469112382646; Thu, 21 Jul 2016 07:46:22 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j29si10208385pfk.53.2016.07.21.07.46.22; Thu, 21 Jul 2016 07:46:22 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752940AbcGUOqU (ORCPT + 29 others); 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 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1B7C13E6; Thu, 21 Jul 2016 07:47:28 -0700 (PDT) Received: from e106622-lin (e106622-lin.cambridge.arm.com [10.1.211.43]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 3B19F3F21A; Thu, 21 Jul 2016 07:46:14 -0700 (PDT) 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-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 Precedence: bulk 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) {