Skip to content

Commit

Permalink
rcu: Add rcu_pointer_handoff()
Browse files Browse the repository at this point in the history
This commit adds an rcu_pointer_handoff() that is intended to mark
situations where a structure's protection transitions from RCU to some
other mechanism (locking, reference counting, whatever).  These markings
should allow external tools to more easily spot bugs involving leaking
pointers out of RCU read-side critical sections.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
  • Loading branch information
Paul E. McKenney committed Oct 6, 2015
1 parent c34d2f4 commit c3ac7cf
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions include/linux/rcupdate.h
Original file line number Diff line number Diff line change
Expand Up @@ -812,6 +812,28 @@ static inline void rcu_preempt_sleep_check(void)
*/
#define rcu_dereference_sched(p) rcu_dereference_sched_check(p, 0)

/**
* rcu_pointer_handoff() - Hand off a pointer from RCU to other mechanism
* @p: The pointer to hand off
*
* This is simply an identity function, but it documents where a pointer
* is handed off from RCU to some other synchronization mechanism, for
* example, reference counting or locking. In C11, it would map to
* kill_dependency(). It could be used as follows:
*
* rcu_read_lock();
* p = rcu_dereference(gp);
* long_lived = is_long_lived(p);
* if (long_lived) {
* if (!atomic_inc_not_zero(p->refcnt))
* long_lived = false;
* else
* p = rcu_pointer_handoff(p);
* }
* rcu_read_unlock();
*/
#define rcu_pointer_handoff(p) (p)

/**
* rcu_read_lock() - mark the beginning of an RCU read-side critical section
*
Expand Down

0 comments on commit c3ac7cf

Please sign in to comment.