The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Juri Lelli <juri.lelli@redhat.com>
Cc: Ingo Molnar <mingo@redhat.com>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
	Valentin Schneider <vschneid@redhat.com>,
	Philip Auld <pauld@redhat.com>,
	Gabriele Monaco <gmonaco@redhat.com>,
	linux-kernel@vger.kernel.org,
	Bruno Goncalves <bgoncalv@redhat.com>
Subject: Re: [PATCH] sched/deadline: Fix missing ENQUEUE_REPLENISH during PI de-boosting
Date: Sat, 7 Feb 2026 09:45:50 +0100	[thread overview]
Message-ID: <20260207084550.GU1282955@noisy.programming.kicks-ass.net> (raw)
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);
 


  parent reply	other threads:[~2026-02-07  8:45 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-06 13:25 [PATCH] sched/deadline: Fix missing ENQUEUE_REPLENISH during PI de-boosting Juri Lelli
2026-02-06 15:39 ` Peter Zijlstra
2026-02-06 15:42   ` Juri Lelli
2026-02-07  8:45 ` Peter Zijlstra [this message]
2026-02-09  9:46   ` Juri Lelli
2026-02-24 13:22     ` Juri Lelli
2026-02-24 13:45     ` Peter Zijlstra
2026-02-24 14:05       ` Juri Lelli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260207084550.GU1282955@noisy.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=bgoncalv@redhat.com \
    --cc=bsegall@google.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=gmonaco@redhat.com \
    --cc=juri.lelli@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mgorman@suse.de \
    --cc=mingo@redhat.com \
    --cc=pauld@redhat.com \
    --cc=rostedt@goodmis.org \
    --cc=vincent.guittot@linaro.org \
    --cc=vschneid@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox