All of lore.kernel.org
 help / color / mirror / Atom feed
From: Frederic Weisbecker <frederic@kernel.org>
To: "Paul E. McKenney" <paulmck@kernel.org>
Cc: rcu@vger.kernel.org, linux-kernel@vger.kernel.org,
	kernel-team@fb.com, mingo@kernel.org, jiangshanlai@gmail.com,
	akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
	josh@joshtriplett.org, tglx@linutronix.de, peterz@infradead.org,
	rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com,
	fweisbec@gmail.com, oleg@redhat.com, joel@joelfernandes.org,
	Guillaume Morin <guillaume@morinfr.org>
Subject: Re: [PATCH rcu 01/18] rcu: Tighten rcu_advance_cbs_nowake() checks
Date: Thu, 2 Dec 2021 01:41:42 +0100	[thread overview]
Message-ID: <20211202004142.GA631289@lothringen> (raw)
In-Reply-To: <20211202002912.3127710-1-paulmck@kernel.org>

On Wed, Dec 01, 2021 at 04:28:55PM -0800, Paul E. McKenney wrote:
> Currently, rcu_advance_cbs_nowake() checks that a grace period is in
> progress, however, that grace period could end just after the check.
> This commit rechecks that a grace period is still in progress the lock.

*while holding the node lock.

> The grace period cannot end while the current CPU's rcu_node structure's
> ->lock is held, thus avoiding false positives from the WARN_ON_ONCE().
> 
> As Daniel Vacek noted, it is not necessary for the rcu_node structure
> to have a CPU that has not yet passed through its quiescent state.
> 
> Tested-By: Guillaume Morin <guillaume@morinfr.org>
> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>

Thanks!

> ---
>  kernel/rcu/tree.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> index ef8d36f580fc3..8706b30c2ac88 100644
> --- a/kernel/rcu/tree.c
> +++ b/kernel/rcu/tree.c
> @@ -1590,10 +1590,11 @@ static void __maybe_unused rcu_advance_cbs_nowake(struct rcu_node *rnp,
>  						  struct rcu_data *rdp)
>  {
>  	rcu_lockdep_assert_cblist_protected(rdp);
> -	if (!rcu_seq_state(rcu_seq_current(&rnp->gp_seq)) ||
> -	    !raw_spin_trylock_rcu_node(rnp))
> +	if (!rcu_seq_state(rcu_seq_current(&rnp->gp_seq)) || !raw_spin_trylock_rcu_node(rnp))
>  		return;
> -	WARN_ON_ONCE(rcu_advance_cbs(rnp, rdp));
> +	// The grace period cannot end while we hold the rcu_node lock.
> +	if (rcu_seq_state(rcu_seq_current(&rnp->gp_seq)))
> +		WARN_ON_ONCE(rcu_advance_cbs(rnp, rdp));
>  	raw_spin_unlock_rcu_node(rnp);
>  }
>  
> -- 
> 2.31.1.189.g2e36527f23
> 

  reply	other threads:[~2021-12-02  0:42 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-02  0:28 [PATCH rcu 0/18] RCU no-CBs CPU updates for v5.17 Paul E. McKenney
2021-12-02  0:28 ` [PATCH rcu 01/18] rcu: Tighten rcu_advance_cbs_nowake() checks Paul E. McKenney
2021-12-02  0:41   ` Frederic Weisbecker [this message]
2021-12-02  0:55     ` Paul E. McKenney
2021-12-02  0:28 ` [PATCH rcu 02/18] rcu/nocb: Make local rcu_nocb_lock_irqsave() safe against concurrent deoffloading Paul E. McKenney
2021-12-02  0:28 ` [PATCH rcu 03/18] rcu/nocb: Prepare state machine for a new step Paul E. McKenney
2021-12-02  0:28 ` [PATCH rcu 04/18] rcu/nocb: Invoke rcu_core() at the start of deoffloading Paul E. McKenney
2021-12-02  0:28 ` [PATCH rcu 05/18] rcu/nocb: Make rcu_core() callbacks acceleration preempt-safe Paul E. McKenney
2021-12-02  0:29 ` [PATCH rcu 06/18] rcu/nocb: Make rcu_core() callbacks acceleration (de-)offloading safe Paul E. McKenney
2021-12-02  0:29 ` [PATCH rcu 07/18] rcu/nocb: Check a stable offloaded state to manipulate qlen_last_fqs_check Paul E. McKenney
2021-12-02  0:29 ` [PATCH rcu 08/18] rcu/nocb: Use appropriate rcu_nocb_lock_irqsave() Paul E. McKenney
2021-12-02  0:29 ` [PATCH rcu 09/18] rcu/nocb: Limit number of softirq callbacks only on softirq Paul E. McKenney
2021-12-02  0:29 ` [PATCH rcu 10/18] rcu: Fix callbacks processing time limit retaining cond_resched() Paul E. McKenney
2021-12-02  0:29 ` [PATCH rcu 11/18] rcu: Apply callbacks processing time limit only on softirq Paul E. McKenney
2021-12-02  0:29 ` [PATCH rcu 12/18] rcu/nocb: Don't invoke local rcu core on callback overload from nocb kthread Paul E. McKenney
2021-12-02  0:29 ` [PATCH rcu 13/18] rcu/nocb: Remove rcu_node structure from nocb list when de-offloaded Paul E. McKenney
2021-12-02  0:29 ` [PATCH rcu 14/18] rcu/nocb: Prepare nocb_cb_wait() to start with a non-offloaded rdp Paul E. McKenney
2021-12-02  0:29 ` [PATCH rcu 15/18] rcu/nocb: Optimize kthreads and rdp initialization Paul E. McKenney
2021-12-02  0:29 ` [PATCH rcu 16/18] rcu/nocb: Create kthreads on all CPUs if "rcu_nocbs=" or "nohz_full=" are passed Paul E. McKenney
2021-12-02  0:29 ` [PATCH rcu 17/18] rcu/nocb: Allow empty "rcu_nocbs" kernel parameter Paul E. McKenney
2021-12-02  0:29 ` [PATCH rcu 18/18] rcu/nocb: Merge rcu_spawn_cpu_nocb_kthread() and rcu_spawn_one_nocb_kthread() Paul E. McKenney
2021-12-02  2:03 ` [PATCH rcu 0/18] RCU no-CBs CPU updates for v5.17 Yury Norov
2021-12-02 18:01   ` 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=20211202004142.GA631289@lothringen \
    --to=frederic@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=dhowells@redhat.com \
    --cc=edumazet@google.com \
    --cc=fweisbec@gmail.com \
    --cc=guillaume@morinfr.org \
    --cc=jiangshanlai@gmail.com \
    --cc=joel@joelfernandes.org \
    --cc=josh@joshtriplett.org \
    --cc=kernel-team@fb.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mingo@kernel.org \
    --cc=oleg@redhat.com \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=rcu@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    /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.