On Thu, Feb 27, 2014 at 11:06 AM, Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx> wrote: > > 3. The comparison was against another RCU-protected pointer, > where that other pointer was properly fetched using one > of the RCU primitives. Here it doesn't matter which pointer > you use. At least as long as the rcu_assign_pointer() for > that other pointer happened after the last update to the > pointed-to structure. > > I am a bit nervous about #3. Any thoughts on it? I think that it might be worth pointing out as an example, and saying that code like p = atomic_read(consume); X; q = atomic_read(consume); Y; if (p == q) data = p->val; then the access of "p->val" is constrained to be data-dependent on *either* p or q, but you can't really tell which, since the compiler can decide that the values are interchangeable. I cannot for the life of me come up with a situation where this would matter, though. If "X" contains a fence, then that fence will be a stronger ordering than anything the consume through "p" would guarantee anyway. And if "X" does *not* contain a fence, then the atomic reads of p and q are unordered *anyway*, so then whether the ordering to the access through "p" is through p or q is kind of irrelevant. No? Linus -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html