From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9ED74292B44 for ; Sat, 7 Feb 2026 08:45:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770453960; cv=none; b=PXJYFO0wkPJ+49LU5XTxFoZpyojJzYXtCryPmSDiMsEXMxumAdzHAOO65Gabfqm5ObuyXzanyMZ/o5rQsXxyG50gyHRwjltn6XREnPQPrdmNNCr4epxbo2zmPO/mv9BO3aFSdB+ytKhf8vgdwv9I2BwxXZuHaRRnsU8svKfmV7s= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770453960; c=relaxed/simple; bh=ShdEZ5LcJmOL6kEU3XB1sK9T11OMiSD1Sm0UAj7mrOE=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=Df/dELhy22ZNsbZbCZXqwD4XHPbrZVOcILUZphVQqJSDhb2wGOjuPAFwMT/Dvk+fvQB3W1JYo+lo4ql3ydI5ZfOQRRYLWx0ypGFi/Ztl5/ii5ad4ljYkU7KAG6VXIvRHbEqqcUy4bxQEFtFr9CsOwHi3AWVeEd/LIugtUjYpUz8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=uBukzXOh; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="uBukzXOh" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=qr8UvF2QzZ1A8y3/lfHXGqYxZeWiuSdanA0Mc9n2LFk=; b=uBukzXOhpDBewRXzmN8TrNf2HW K0XddCbb9J8u7QEtAMb2dImlVmkNMzAXtnMczzYIwcVJ+ZKhwn5AawAmewIsYkJPDuK2EvfCrgFTX 0h+qR7lSOP6TwtGTstCj+EwSKYZJsVhXhxIgOJSTZO8r26saQFsYMaxN2xyLI6OSsIkPFD6vBEoOQ YjTyen1qX+gDpKzkV/Mv2hmMh2KWbf9zkFEZYqmDt4q1gI4KFibP9Ck4vXO1FotR1J0h7kbdUmTjU /ZkjXlEPdOq3EyF151T1krSE1X/gwBVb8KdZ0gt2Gh1+aqcyuerpu4DFcIpKiJMPscd0Hv2X4xjZ9 irq5Z59A==; Received: from 77-249-17-252.cable.dynamic.v4.ziggo.nl ([77.249.17.252] helo=noisy.programming.kicks-ass.net) by casper.infradead.org with esmtpsa (Exim 4.98.2 #2 (Red Hat Linux)) id 1vodwt-00000006PTE-2dGC; Sat, 07 Feb 2026 08:45:51 +0000 Received: by noisy.programming.kicks-ass.net (Postfix, from userid 1000) id 2598630119C; Sat, 07 Feb 2026 09:45:50 +0100 (CET) Date: Sat, 7 Feb 2026 09:45:50 +0100 From: Peter Zijlstra To: Juri Lelli Cc: Ingo Molnar , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Philip Auld , Gabriele Monaco , linux-kernel@vger.kernel.org, Bruno Goncalves Subject: Re: [PATCH] sched/deadline: Fix missing ENQUEUE_REPLENISH during PI de-boosting Message-ID: <20260207084550.GU1282955@noisy.programming.kicks-ass.net> References: <20260206-upstream-fix-deadline-piboost-b4-v1-1-14043567b89c@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260206-upstream-fix-deadline-piboost-b4-v1-1-14043567b89c@redhat.com> On Fri, Feb 06, 2026 at 02:25:52PM +0100, Juri Lelli wrote: > @@ -284,6 +285,33 @@ static bool check_same_owner(struct task_struct *p) > uid_eq(cred->euid, pcred->uid)); > } > > +#ifdef CONFIG_RT_MUTEXES > +static void __setscheduler_dl(struct task_struct *p, > + struct sched_change_ctx *scope) > +{ > + struct task_struct *pi_task = rt_mutex_get_top_task(p); > + > + /* > + * In case a former DEADLINE task (either proper or boosted) gets > + * setscheduled to a lower priority class, check if it neeeds to > + * inherit parameters from a potential pi_task. In that case make > + * sure replenishment happens with the next enqueue. > + */ > + if (!dl_prio(p->normal_prio) && > + (pi_task && dl_prio(pi_task->prio))) { > + p->dl.pi_se = pi_task->dl.pi_se; > + > + if (scope && scope->queued) > + scope->flags |= ENQUEUE_REPLENISH; > + } > +} > +#else /* !CONFIG_RT_MUTEXES */ > +static void __setscheduler_dl(struct task_struct *p, > + struct sched_change_ctx *scope) > +{ > +} > +#endif /* !CONFIG_RT_MUTEXES */ > + > #ifdef CONFIG_UCLAMP_TASK > > static int uclamp_validate(struct task_struct *p, > @@ -657,6 +685,7 @@ int __sched_setscheduler(struct task_struct *p, > p->prio = newprio; > } > __setscheduler_uclamp(p, attr); > + __setscheduler_dl(p, scope); > > if (scope->queued) { > /* > Urgh... :-) So normally it would be __setscheduler_params(), but that funks out because !dl_policy() -- after all, we're demoting the boosted task to be !DL. So then we need to fix up things to the effective priority. Should this not be inside the !KEEP_PARAMS thing? Something like so? (afaict nothing clears dl_se::pi_se except rt_mutex_setprio() so that should still be valid here -- so we don't need to go find it again) diff --git a/kernel/sched/syscalls.c b/kernel/sched/syscalls.c index 6f10db3646e7..ccd2be806e13 100644 --- a/kernel/sched/syscalls.c +++ b/kernel/sched/syscalls.c @@ -655,6 +655,10 @@ int __sched_setscheduler(struct task_struct *p, __setscheduler_params(p, attr); p->sched_class = next_class; p->prio = newprio; +#ifdef CONFIG_RT_MUTEXES + if (dl_prio(newprio) && !dl_policy(policy) && p->dl.pi_se) + scope->flags |= ENQUEUE_REPLENISH; +#endif } __setscheduler_uclamp(p, attr);