rcu: Provide polling interfaces for Tiny RCU grace periods
authorPaul E. McKenney <paulmck@kernel.org>
Fri, 26 Feb 2021 01:36:06 +0000 (17:36 -0800)
committerPaul E. McKenney <paulmck@kernel.org>
Thu, 25 Mar 2021 00:16:15 +0000 (17:16 -0700)
commit0909fc2b2c41aae50a18a36ac2858d156f521871
tree593ed162e57898257c277f10380a95a3fa0a034c
parent7abb18bd7567480e34f46d3512369ec49499064e
rcu: Provide polling interfaces for Tiny 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: Revert cond_synchronize_rcu() to might_sleep() per Frederic Weisbecker feedback. ]
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
include/linux/rcutiny.h
kernel/rcu/tiny.c