On Mon, Mar 02, 2015 at 09:51:16AM +0100, Peter Zijlstra wrote: > On Mon, Mar 02, 2015 at 09:33:20AM +0100, Peter Zijlstra wrote: > > On Sun, Mar 01, 2015 at 02:02:23PM +0000, Mathieu Desnoyers wrote: > > > > The latch, AFAIU, takes care of making sure the new objects are > > > initialized before being published into the data structure, so there > > > would be no need to use RCU assign pointer. However, we really need > > > RCU around reads, along with a grace period between removal of an object > > > and its teardown. > > > > So I do need the rcu_assign_pointer for the RB link because that also > > initializes the rb_node itself. Or put differently, be _very_ _VERY_ > > sure your entire object is initialized before the latch. > > > > Secondly, note that the latch does a WMB and rcu_assign_pointer does a > > RELEASE, these are not equivalent. > > > > So I don't think I will highlight this particular point. If you're sure > > enough to know the difference you can get away with it, sure. But in > > general I think people should still use rcu_assign_pointer; if only to > > make Paul sleep better at night ;-)
I do appreciate that sentiment. ;-) > Also note that if you do not use rcu_assign_pointer() one will at the > very least require WRITE_ONCE(). And, for ARM, IA64, and PowerPC, memory-barrier instructions. Thanx, Paul -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/