rcu: Provide functions for determining if call_rcu() has been invoked
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 24 Jul 2018 22:28:09 +0000 (15:28 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 30 Aug 2018 23:03:42 +0000 (16:03 -0700)
commit74de6960c99d8df0d09fb29a7b014cb9c5571e2b
tree2399404f1a3a043609c1f998c4c5f836e1100244
parent7e28c5af4ef6b539334aa5de40feca0c041c94df
rcu: Provide functions for determining if call_rcu() has been invoked

This commit adds rcu_head_init() and rcu_head_after_call_rcu() functions
to help RCU users detect when another CPU has passed the specified
rcu_head structure and function to call_rcu().  The rcu_head_init()
should be invoked before making the structure visible to RCU readers,
and then the rcu_head_after_call_rcu() may be invoked from within
an RCU read-side critical section on an rcu_head structure that
was obtained during a traversal of the data structure in question.
The rcu_head_after_call_rcu() function will return true if the rcu_head
structure has already been passed (with the specified function) to
call_rcu(), otherwise it will return false.

If rcu_head_init() has not been invoked on the rcu_head structure
or if the rcu_head (AKA callback) has already been invoked, then
rcu_head_after_call_rcu() will do WARN_ON_ONCE().

Reported-by: NeilBrown <neilb@suse.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
[ paulmck: Apply neilb naming feedback. ]
include/linux/rcupdate.h
kernel/rcu/rcu.h