On Tue, Jan 26, 2016 at 12:10 PM, Paul E. McKenney
[off-list ref] wrote:
On Tue, Jan 26, 2016 at 11:44:46AM -0800, Linus Torvalds wrote:
quoted
quoted
struct foo *x = READ_ONCE(*ptr);
smp_read_barrier_depends();
x->bar = 5;
This case is complete BS. Stop perpetuating it. I already removed a
number of bogus cases of it, and I removed the incorrect documentation
that had this crap.
If I understand your objection correctly, you want the above pattern
expressed either like this:
struct foo *x = rcu_dereference(*ptr);
x->bar = 5;
Or like this:
struct foo *x = lockless_dereference(*ptr);
x->bar = 5;
Or am I missing your point?
You are entirely missing the point.
You might as well just write it as
struct foo x = READ_ONCE(*ptr);
x->bar = 5;
because that "smp_read_barrier_depends()" does NOTHING wrt the second write.
So what I am saying is simple: anybody who writes that
"smp_read_barrier_depends()" in there is just ttoally and completely
WRONG, and the fact that Peter wrote it out after I removed several
instances of that bloody f*cking idiocy is disturbing.
Don't do it. It's BS. It's wrong. Don't make excuses for it.
Linus