All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joel Fernandes <joel@joelfernandes.org>
To: "Paul E. McKenney" <paulmck@kernel.org>
Cc: Zhen Lei <thunder.leizhen@huawei.com>,
	Frederic Weisbecker <frederic@kernel.org>,
	Neeraj Upadhyay <quic_neeraju@quicinc.com>,
	Josh Triplett <josh@joshtriplett.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	Lai Jiangshan <jiangshanlai@gmail.com>,
	rcu@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 1/1] rcu: Simplify the code logic of rcu_init_nohz()
Date: Thu, 25 Aug 2022 19:24:05 +0000	[thread overview]
Message-ID: <YwfMVTnjCt/gdArK@google.com> (raw)
In-Reply-To: <20220825172654.GP6159@paulmck-ThinkPad-P17-Gen-1>

On Thu, Aug 25, 2022 at 10:26:54AM -0700, Paul E. McKenney wrote:
> On Thu, Aug 25, 2022 at 05:23:11PM +0800, Zhen Lei wrote:
> > When CONFIG_RCU_NOCB_CPU_DEFAULT_ALL=y or CONFIG_NO_HZ_FULL=y, additional
> > CPUs need to be added to 'rcu_nocb_mask'. But 'rcu_nocb_mask' may be not
> > available now, due to 'rcu_nocbs' is not specified. Check and initialize
> > 'rcu_nocb_mask' before using it. This code simplification strictly follows
> > this logic, compared with old implementations, unnecessary crossovers are
> > avoided and easy to understand.
> > 
> > Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
> 
> Much nicer, thank you!
> 
> As usual, I could not resist the urge to wordsmith.  Could you please
> check to make sure that I did not mess anything up?
> 
> 							Thanx, Paul
> 
> ------------------------------------------------------------------------
> 
> commit 4ac3b3d1a19943b1522c0b1d0895aefbb80ec294
> Author: Zhen Lei <thunder.leizhen@huawei.com>
> Date:   Thu Aug 25 17:23:11 2022 +0800
> 
>     rcu: Simplify rcu_init_nohz() cpumask handling
>     
>     In kernels built with either CONFIG_RCU_NOCB_CPU_DEFAULT_ALL=y or
>     CONFIG_NO_HZ_FULL=y, additional CPUs must be added to rcu_nocb_mask.
>     Except that kernels booted without the rcu_nocb_mask= will not have
>     allocated rcu_nocb_mask.  And the current rcu_init_nohz() function uses
>     its need_rcu_nocb_mask and offload_all local variables to track the
>     rcu_nocb and nohz_full state.
>     
>     But there is a much simpler approach, namely creating a cpumask pointer
>     to track the default and then using cpumask_available() to check the
>     rcu_nocb_mask state.  This commit takes this approach, thereby simplifying
>     and shortening the rcu_init_nohz() function.
>     
>     Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
>     Signed-off-by: Paul E. McKenney <paulmck@kernel.org>

Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>

thanks,

 - Joel


> 
> diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h
> index 0a5f0ef414845..c8167be2288fa 100644
> --- a/kernel/rcu/tree_nocb.h
> +++ b/kernel/rcu/tree_nocb.h
> @@ -1210,45 +1210,31 @@ EXPORT_SYMBOL_GPL(rcu_nocb_cpu_offload);
>  void __init rcu_init_nohz(void)
>  {
>  	int cpu;
> -	bool need_rcu_nocb_mask = false;
> -	bool offload_all = false;
>  	struct rcu_data *rdp;
> +	const struct cpumask *cpumask = NULL;
>  
>  #if defined(CONFIG_RCU_NOCB_CPU_DEFAULT_ALL)
> -	if (!rcu_state.nocb_is_setup) {
> -		need_rcu_nocb_mask = true;
> -		offload_all = true;
> -	}
> -#endif /* #if defined(CONFIG_RCU_NOCB_CPU_DEFAULT_ALL) */
> -
> -#if defined(CONFIG_NO_HZ_FULL)
> -	if (tick_nohz_full_running && !cpumask_empty(tick_nohz_full_mask)) {
> -		need_rcu_nocb_mask = true;
> -		offload_all = false; /* NO_HZ_FULL has its own mask. */
> -	}
> -#endif /* #if defined(CONFIG_NO_HZ_FULL) */
> +	cpumask = cpu_possible_mask;
> +#elif defined(CONFIG_NO_HZ_FULL)
> +	if (tick_nohz_full_running && !cpumask_empty(tick_nohz_full_mask))
> +		cpumask = tick_nohz_full_mask;
> +#endif
>  
> -	if (need_rcu_nocb_mask) {
> +	if (cpumask) {
>  		if (!cpumask_available(rcu_nocb_mask)) {
>  			if (!zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL)) {
>  				pr_info("rcu_nocb_mask allocation failed, callback offloading disabled.\n");
>  				return;
>  			}
>  		}
> +
> +		cpumask_or(rcu_nocb_mask, rcu_nocb_mask, cpumask);
>  		rcu_state.nocb_is_setup = true;
>  	}
>  
>  	if (!rcu_state.nocb_is_setup)
>  		return;
>  
> -#if defined(CONFIG_NO_HZ_FULL)
> -	if (tick_nohz_full_running)
> -		cpumask_or(rcu_nocb_mask, rcu_nocb_mask, tick_nohz_full_mask);
> -#endif /* #if defined(CONFIG_NO_HZ_FULL) */
> -
> -	if (offload_all)
> -		cpumask_setall(rcu_nocb_mask);
> -
>  	if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) {
>  		pr_info("\tNote: kernel parameter 'rcu_nocbs=', 'nohz_full', or 'isolcpus=' contains nonexistent CPUs.\n");
>  		cpumask_and(rcu_nocb_mask, cpu_possible_mask,

  reply	other threads:[~2022-08-25 19:24 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-25  9:23 [PATCH v5 0/1] rcu/nocb: Delete local variable 'need_rcu_nocb_mask' in rcu_init_nohz() Zhen Lei
2022-08-25  9:23 ` [PATCH v5 1/1] rcu: Simplify the code logic of rcu_init_nohz() Zhen Lei
2022-08-25 17:26   ` Paul E. McKenney
2022-08-25 19:24     ` Joel Fernandes [this message]
2022-08-26  1:36       ` Paul E. McKenney
2022-08-26  1:42     ` Leizhen (ThunderTown)
2022-08-26 13:45       ` Paul E. McKenney

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=YwfMVTnjCt/gdArK@google.com \
    --to=joel@joelfernandes.org \
    --cc=frederic@kernel.org \
    --cc=jiangshanlai@gmail.com \
    --cc=josh@joshtriplett.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=paulmck@kernel.org \
    --cc=quic_neeraju@quicinc.com \
    --cc=rcu@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=thunder.leizhen@huawei.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.