rcu: Provide polling interfaces for Tree RCU grace periods
authorPaul E. McKenney <paulmck@kernel.org>
Fri, 26 Feb 2021 00:10:38 +0000 (16:10 -0800)
committerPaul E. McKenney <paulmck@kernel.org>
Mon, 22 Mar 2021 15:23:48 +0000 (08:23 -0700)
commit7abb18bd7567480e34f46d3512369ec49499064e
tree80c172e411f81a8009fbc6791d814b0e2033135d
parenta38fd8748464831584a19438cbb3082b5a2dab15
rcu: Provide polling interfaces for Tree RCU grace periods

There is a need for a non-blocking polling interface for RCU grace
periods, so this commit supplies start_poll_synchronize_rcu() and
poll_state_synchronize_rcu() for this purpose.  Note that the existing
get_state_synchronize_rcu() may be used if future grace periods are
inevitable (perhaps due to a later call_rcu() invocation).  The new
start_poll_synchronize_rcu() is to be used if future grace periods
might not otherwise happen.  Finally, poll_state_synchronize_rcu()
provides a lockless check for a grace period having elapsed since
the corresponding call to either of the get_state_synchronize_rcu()
or start_poll_synchronize_rcu().

As with get_state_synchronize_rcu(), the return value from either
get_state_synchronize_rcu() or start_poll_synchronize_rcu() is passed in
to a later call to either poll_state_synchronize_rcu() or the existing
(might_sleep) cond_synchronize_rcu().

[ paulmck: Remove redundant smp_mb() per Frederic Weisbecker feedback. ]
[ Update poll_state_synchronize_rcu() docbook per Frederic Weisbecker feedback. ]
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
include/linux/rcutree.h
kernel/rcu/tree.c