All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Segall <bsegall@google.com>
To: K Prateek Nayak <kprateek.nayak@amd.com>
Cc: Ingo Molnar <mingo@redhat.com>,
	 Peter Zijlstra <peterz@infradead.org>,
	Juri Lelli <juri.lelli@redhat.com>,
	 Vincent Guittot <vincent.guittot@linaro.org>,
	 Dietmar Eggemann <dietmar.eggemann@arm.com>,
	 Steven Rostedt <rostedt@goodmis.org>,
	 Mel Gorman <mgorman@suse.de>,
	 Valentin Schneider <vschneid@redhat.com>,
	Aaron Lu <ziqianlu@bytedance.com>,  Josh Don <joshdon@google.com>,
	<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/5] sched/fair: Convert cfs bandwidth throttling to use guards
Date: Thu, 28 May 2026 14:46:15 -0700	[thread overview]
Message-ID: <xm26pl2fmcm0.fsf@google.com> (raw)
In-Reply-To: <20260528094830.13291-2-kprateek.nayak@amd.com> (K. Prateek Nayak's message of "Thu, 28 May 2026 09:48:26 +0000")

K Prateek Nayak <kprateek.nayak@amd.com> writes:

> Routine conversion of rcu_read_lock(), spin_lock*, and rq_lock usage
> within the cfs bandwidth controller to use class guards.
>
> Only notable changes are:
>
> - Conversion of do_sched_cfs_slack_timer() to return a bool and moving
>   the call to distribute_cfs_runtime() into the caller for a cleaner
>   guard usage.
>
> - Reordering of list_del_rcu() against throttled_clock indicator update
>   in unthrottle_cfs_rq(). Both are done with "cfs_b->lock" held after
>   the "cfs_rq->throttled" is cleared which make the reordering safe
>   against concurrent list modifications.
>
> No functional changes intended.

Some minor style nitpicks that I don't care /that/ much about, so:

Reviewed-By: Ben Segall <bsegall@google.com>

> @@ -7011,40 +7006,33 @@ static bool distribute_cfs_runtime(struct cfs_bandwidth *cfs_b)
>  		if (cfs_rq->runtime_remaining > 0) {
>  			if (cpu_of(rq) != this_cpu) {
>  				unthrottle_cfs_rq_async(cfs_rq);
> -			} else {
> -				/*
> -				 * We currently only expect to be unthrottling
> -				 * a single cfs_rq locally.
> -				 */
> -				WARN_ON_ONCE(!list_empty(&local_unthrottle));
> -				list_add_tail(&cfs_rq->throttled_csd_list,
> -					      &local_unthrottle);
> +				continue;
>  			}
> -		} else {
> -			throttled = true;
> +
> +			/*
> +			 * We currently only expect to be unthrottling
> +			 * a single cfs_rq locally.
> +			 */
> +			WARN_ON_ONCE(!list_empty(&local_unthrottle));
> +			list_add_tail(&cfs_rq->throttled_csd_list, &local_unthrottle);
> +			continue;
>  		}
>  
> -next:
> -		rq_unlock_irqrestore(rq, &rf);
> +		throttled = true;
>  	}

I don't think the extra continues wind up being clearer here than the
original if/else code and just removing the next/unlock.

> @@ -7197,29 +7185,25 @@ static __always_inline void return_cfs_rq_runtime(struct cfs_rq *cfs_rq)
>   * This is done with a timer (instead of inline with bandwidth return) since
>   * it's necessary to juggle rq->locks to unthrottle their respective cfs_rqs.
>   */
> -static void do_sched_cfs_slack_timer(struct cfs_bandwidth *cfs_b)
> +static bool do_sched_cfs_slack_timer(struct cfs_bandwidth *cfs_b)
>  {
>  	u64 runtime = 0, slice = sched_cfs_bandwidth_slice();
> -	unsigned long flags;
>  
>  	/* confirm we're still not at a refresh boundary */
> -	raw_spin_lock_irqsave(&cfs_b->lock, flags);
> +	guard(raw_spinlock_irqsave)(&cfs_b->lock);
> +
>  	cfs_b->slack_started = false;
>  
> -	if (runtime_refresh_within(cfs_b, min_bandwidth_expiration)) {
> -		raw_spin_unlock_irqrestore(&cfs_b->lock, flags);
> -		return;
> -	}
> +	if (runtime_refresh_within(cfs_b, min_bandwidth_expiration))
> +		return false;
>  
>  	if (cfs_b->quota != RUNTIME_INF && cfs_b->runtime > slice)
>  		runtime = cfs_b->runtime;
>  
> -	raw_spin_unlock_irqrestore(&cfs_b->lock, flags);
> -
>  	if (!runtime)
> -		return;
> +		return false;
>  
> -	distribute_cfs_runtime(cfs_b);
> +	return true;
>  }
>  
>  /*

Here I think it's also nicer to just use a scoped_guard rather than move
part of it out and have part of the work done outside of the do_ helper.


  reply	other threads:[~2026-05-28 21:46 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-28  9:48 [PATCH 0/5] sched/fair: Allow account_cfs_rq_runtime() to throttle current hierarchy K Prateek Nayak
2026-05-28  9:48 ` [PATCH 1/5] sched/fair: Convert cfs bandwidth throttling to use guards K Prateek Nayak
2026-05-28 21:46   ` Benjamin Segall [this message]
2026-05-28  9:48 ` [PATCH 2/5] sched/fair: Use throttled_csd_list for local unthrottle K Prateek Nayak
2026-05-28 21:53   ` Benjamin Segall
2026-05-28  9:48 ` [PATCH 3/5] sched/fair: Call update_curr() before unthrottling the hierarchy K Prateek Nayak
2026-05-28 22:03   ` Benjamin Segall
2026-06-01  3:52   ` Aaron Lu
2026-06-01  5:50     ` K Prateek Nayak
2026-06-01 11:27       ` Peter Zijlstra
2026-06-02  6:33         ` K Prateek Nayak
2026-05-28  9:48 ` [PATCH 4/5] sched/fair: Move the throttled tasks to a local list in tg_unthrottle_up() K Prateek Nayak
2026-05-28 22:14   ` Benjamin Segall
2026-05-28  9:48 ` [PATCH 5/5] sched/fair: Unify cfs_rq throttling via account_cfs_rq_runtime() K Prateek Nayak
2026-05-28 22:44   ` Benjamin Segall
2026-06-01 13:48   ` Peter Zijlstra
2026-06-02  7:01     ` K Prateek Nayak
2026-06-02  8:32       ` Peter Zijlstra
2026-06-02  8:57         ` K Prateek Nayak
2026-05-28 11:45 ` [PATCH 0/5] sched/fair: Allow account_cfs_rq_runtime() to throttle current hierarchy Peter Zijlstra
2026-06-01  6:18 ` Aaron Lu

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=xm26pl2fmcm0.fsf@google.com \
    --to=bsegall@google.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=joshdon@google.com \
    --cc=juri.lelli@redhat.com \
    --cc=kprateek.nayak@amd.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mgorman@suse.de \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=vincent.guittot@linaro.org \
    --cc=vschneid@redhat.com \
    --cc=ziqianlu@bytedance.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.