From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760600AbcBYOBz (ORCPT ); Thu, 25 Feb 2016 09:01:55 -0500 Received: from bombadil.infradead.org ([198.137.202.9]:56959 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759971AbcBYOBy (ORCPT ); Thu, 25 Feb 2016 09:01:54 -0500 Date: Thu, 25 Feb 2016 15:01:49 +0100 From: Peter Zijlstra To: luca abeni Cc: Juri Lelli , linux-kernel@vger.kernel.org Subject: Re: Question about prio_changed_dl() Message-ID: <20160225140149.GK6357@twins.programming.kicks-ass.net> References: <20160219134345.70ff4aa0@utopia> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160219134345.70ff4aa0@utopia> User-Agent: Mutt/1.5.21 (2012-12-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Feb 19, 2016 at 01:43:45PM +0100, luca abeni wrote: > Hi, > > when playing with the __dl_{add,sub}_ac() stuff recently posted by > Juri, I found something that looks strange in prio_changed_dl(): > > static void prio_changed_dl(struct rq *rq, struct task_struct *p, > int oldprio) > { > if (task_on_rq_queued(p) || rq->curr == p) { > [...] > } else > switched_to_dl(rq, p); > } > but switched_to_dl() does: > static void switched_to_dl(struct rq *rq, struct task_struct *p) > { > if (task_on_rq_queued(p) && rq->curr != p) { > [...] > } > } > > so, prio_changed_dl() invokes switched_to_dl() if task_on_rq_queued() > is false, but in this case switched_to_dl() does nothing... Am I > missing something, or the > } else > switched_to_dl(rq, p); > is useless? Agreed, see below. > (BTW, it seems to me that switched_to_dl() is never invoked, for some > reason...) Hmm, it should be invoked if you do sched_setattr() to get SCHED_DEADLINE. --- Subject: sched/deadline: Remove superfluous call to switched_to_dl() if (A || B) { } else if (A && !B) { } If A we'll take the first branch, if !A we will not satisfy the second. Therefore the second branch will never be taken. Cc: Juri Lelli Reported-by: luca abeni Signed-off-by: Peter Zijlstra (Intel) --- kernel/sched/deadline.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index 57b939c81bce..c161c53d9424 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -1768,8 +1768,7 @@ static void prio_changed_dl(struct rq *rq, struct task_struct *p, */ resched_curr(rq); #endif /* CONFIG_SMP */ - } else - switched_to_dl(rq, p); + } } const struct sched_class dl_sched_class = {