Messages in this thread | | | Date | Wed, 7 Oct 2015 09:22:27 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH tip/core/rcu 10/13] rcu: Add rcu_pointer_handoff() |
| |
On Tue, Oct 06, 2015 at 02:02:43PM -0700, Paul E. McKenney wrote: > On Tue, Oct 06, 2015 at 10:27:41PM +0200, Peter Zijlstra wrote: > > On Tue, Oct 06, 2015 at 09:13:45AM -0700, Paul E. McKenney wrote: > > > /** > > > + * 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) > > > > Will you actually be using this? It seems a tad pointless to add if you > > don't. > > Some of the LLVM guys believe that they can diagnose RCU pointer leaks > if this is used. But yes, it does need to be used.
The thing is, I'm not convinced this is a 'sane' interface. Its _far_ too easy to forget. It doesn't make any kind of sense either, which is part of why its hard to remember.
| |