OSDN Git Service

rcu: Make nocb_gp_wait() double-check unexpected-callback warning
authorPaul E. McKenney <paulmck@kernel.org>
Tue, 4 Feb 2020 22:55:29 +0000 (14:55 -0800)
committerPaul E. McKenney <paulmck@kernel.org>
Thu, 20 Feb 2020 23:58:23 +0000 (15:58 -0800)
commit3d05031ae6de6ad084aa41263aed1343065233d5
tree4f413b88d90e48852037943c1470c46076e94a82
parent13817dd589f426aee9c36e3670e7cb2a7f067d23
rcu: Make nocb_gp_wait() double-check unexpected-callback warning

Currently, nocb_gp_wait() unconditionally complains if there is a
callback not already associated with a grace period.  This assumes that
either there was no such callback initially on the one hand, or that
the rcu_advance_cbs() function assigned all such callbacks to a grace
period on the other.  However, in theory there are some situations that
would prevent rcu_advance_cbs() from assigning all of the callbacks.

This commit therefore checks for unassociated callbacks immediately after
rcu_advance_cbs() returns, while the corresponding rcu_node structure's
->lock is still held.  If there are unassociated callbacks at that point,
the subsequent WARN_ON_ONCE() is disabled.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
kernel/rcu/tree_plugin.h