rcu: Tighten rcu_advance_cbs_nowake() checks
authorPaul E. McKenney <paulmck@kernel.org>
Fri, 17 Sep 2021 22:04:48 +0000 (15:04 -0700)
committerPaul E. McKenney <paulmck@kernel.org>
Wed, 8 Dec 2021 00:23:03 +0000 (16:23 -0800)
commit614ddad17f22a22e035e2ea37a04815f50362017
tree6f2cadbdfb0038b9ae8b36364e714ddf6771c799
parent8c0abfd6d2f6b0221194241ac2908751a2a0385f
rcu: Tighten rcu_advance_cbs_nowake() checks

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 while
holding the rcu_node structure's 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>
kernel/rcu/tree.c