On Thu, Jan 14, 2016 at 02:20:46PM -0800, Paul E. McKenney wrote:
On Thu, Jan 14, 2016 at 01:24:34PM -0800, Leonid Yegoshin wrote:
quoted
On 01/14/2016 12:48 PM, Paul E. McKenney wrote:
quoted
So SYNC_RMB is intended to implement smp_rmb(), correct?
Yes.
quoted
You could use SYNC_ACQUIRE() to implement read_barrier_depends() and
smp_read_barrier_depends(), but SYNC_RMB probably does not suffice.
If smp_read_barrier_depends() is used to separate not only two reads
but read pointer and WRITE basing on that pointer (example below) -
yes. I just doesn't see any example of this in famous
Documentation/memory-barriers.txt and had no chance to know what you
use it in this way too.
Well, Documentation/memory-barriers.txt was intended as a guide for Linux
kernel hackers, and not for hardware architects.
Yeah, this goes under the header: memory-barriers.txt is _NOT_ a
specification (I seem to keep repeating this).
------------------------------------------------------------------------
commit 955720966e216b00613fcf60188d507c103f0e80
Author: Paul E. McKenney [off-list ref]
Date: Thu Jan 14 14:17:04 2016 -0800
documentation: Subsequent writes ordered by rcu_dereference()
The current memory-barriers.txt does not address the possibility of
a write to a dereferenced pointer. This should be rare,
How are these rare? Isn't:
rcu_read_lock()
obj = rcu_dereference(ptr);
if (!atomic_inc_not_zero(&obj->ref))
obj = NULL;
rcu_read_unlock();
a _very_ common thing to do?