From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: David Howells <dhowells@redhat.com>
Cc: linux-kernel@vger.kernel.org, mingo@kernel.org,
jiangshanlai@gmail.com, dipankar@in.ibm.com,
akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
josh@joshtriplett.org, tglx@linutronix.de, peterz@infradead.org,
rostedt@goodmis.org, edumazet@google.com, fweisbec@gmail.com,
oleg@redhat.com
Subject: Re: [PATCH tip/core/rcu 01/21] doc: READ_ONCE() now implies smp_barrier_depends()
Date: Mon, 4 Dec 2017 10:52:15 -0800 [thread overview]
Message-ID: <20171204185215.GB7829@linux.vnet.ibm.com> (raw)
In-Reply-To: <15076.1512401936@warthog.procyon.org.uk>
On Mon, Dec 04, 2017 at 03:38:56PM +0000, David Howells wrote:
> Paul E. McKenney <paulmck@linux.vnet.ibm.com> wrote:
>
> > - Q = READ_ONCE(P); smp_read_barrier_depends(); D = READ_ONCE(*Q);
> > + Q = READ_ONCE(P); D = READ_ONCE(*Q);
> >
> > the CPU will issue the following memory operations:
> >
> > Q = LOAD P, D = LOAD *Q
>
> The CPU may now issue two barriers in addition to the loads, so should we show
> this? E.g.:
>
> Q = LOAD P, BARRIER, D = LOAD *Q, BARRIER
Good point! How about as shown in the updated patch below?
Thanx, Paul
------------------------------------------------------------------------
commit 40555946447a394889243e4393e312f65d847e1e
Author: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Date: Mon Oct 9 09:15:21 2017 -0700
doc: READ_ONCE() now implies smp_barrier_depends()
This commit updates an example in memory-barriers.txt to account for
the fact that READ_ONCE() now implies smp_barrier_depends().
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
[ paulmck: Added MEMORY_BARRIER instructions from DEC Alpha from
READ_ONCE(), per David Howells's feedback. ]
diff --git a/Documentation/memory-barriers.txt b/Documentation/memory-barriers.txt
index 479ecec80593..13fd35b6a597 100644
--- a/Documentation/memory-barriers.txt
+++ b/Documentation/memory-barriers.txt
@@ -227,17 +227,20 @@ There are some minimal guarantees that may be expected of a CPU:
(*) On any given CPU, dependent memory accesses will be issued in order, with
respect to itself. This means that for:
- Q = READ_ONCE(P); smp_read_barrier_depends(); D = READ_ONCE(*Q);
+ Q = READ_ONCE(P); D = READ_ONCE(*Q);
the CPU will issue the following memory operations:
Q = LOAD P, D = LOAD *Q
- and always in that order. On most systems, smp_read_barrier_depends()
- does nothing, but it is required for DEC Alpha. The READ_ONCE()
- is required to prevent compiler mischief. Please note that you
- should normally use something like rcu_dereference() instead of
- open-coding smp_read_barrier_depends().
+ and always in that order. However, on DEC Alpha, READ_ONCE() also
+ emits a memory-barrier instruction, so that a DEC Alpha CPU will
+ instead issue the following memory operations:
+
+ Q = LOAD P, MEMORY_BARRIER, D = LOAD *Q, MEMORY_BARRIER
+
+ Whether on DEC Alpha or not, the READ_ONCE() also prevents compiler
+ mischief.
(*) Overlapping loads and stores within a particular CPU will appear to be
ordered within that CPU. This means that for:
next prev parent reply other threads:[~2017-12-04 18:52 UTC|newest]
Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-01 19:50 [PATCH tip/core/rcu 0/21] De-emphasize {smp_,}read_barrier_depends Paul E. McKenney
2017-12-01 19:50 ` [PATCH tip/core/rcu 01/21] doc: READ_ONCE() now implies smp_barrier_depends() Paul E. McKenney
2017-12-04 15:38 ` David Howells
2017-12-04 18:52 ` Paul E. McKenney [this message]
2017-12-04 21:54 ` Peter Zijlstra
2017-12-04 22:15 ` Paul E. McKenney
2017-12-04 22:39 ` David Howells
2017-12-04 22:57 ` Peter Zijlstra
2017-12-01 19:50 ` [PATCH tip/core/rcu 02/21] mn10300: READ_ONCE() now implies smp_read_barrier_depends() Paul E. McKenney
2017-12-01 19:50 ` [PATCH tip/core/rcu 03/21] drivers/net/ethernet/qlogic/qed: Fix __qed_spq_block() ordering Paul E. McKenney
2017-12-01 19:50 ` [PATCH tip/core/rcu 04/21] fs/dcache: Use release-acquire for name/length update Paul E. McKenney
2017-12-01 19:51 ` [PATCH tip/core/rcu 05/21] percpu: READ_ONCE() now implies smp_read_barrier_depends() Paul E. McKenney
2017-12-01 19:51 ` [PATCH tip/core/rcu 06/21] rcu: Adjust read-side accessor comments for READ_ONCE() Paul E. McKenney
2017-12-01 19:51 ` [PATCH tip/core/rcu 07/21] rtnetlink: Update now-misleading smp_read_barrier_depends() comment Paul E. McKenney
2017-12-01 19:51 ` [PATCH tip/core/rcu 08/21] seqlock: Remove now-redundant smp_read_barrier_depends() Paul E. McKenney
2017-12-01 19:51 ` [PATCH tip/core/rcu 09/21] uprobes: " Paul E. McKenney
2017-12-01 19:51 ` [PATCH tip/core/rcu 10/21] locking: Remove smp_read_barrier_depends() from queued_spin_lock_slowpath() Paul E. McKenney
2017-12-01 19:51 ` [PATCH tip/core/rcu 11/21] tracepoint: Remove smp_read_barrier_depends() from comment Paul E. McKenney
2017-12-01 19:51 ` [PATCH tip/core/rcu 12/21] lib/assoc_array: Remove smp_read_barrier_depends() Paul E. McKenney
2017-12-01 19:51 ` [PATCH tip/core/rcu 13/21] mm/ksm: Remove now-redundant smp_read_barrier_depends() Paul E. McKenney
2017-12-01 19:51 ` Paul E. McKenney
2017-12-01 19:51 ` [PATCH tip/core/rcu 14/21] netfilter: " Paul E. McKenney
2017-12-01 19:51 ` [PATCH tip/core/rcu 15/21] keyring: " Paul E. McKenney
2017-12-01 19:51 ` Paul E. McKenney
2017-12-01 19:51 ` Paul E. McKenney
2017-12-04 0:59 ` James Morris
2017-12-04 0:59 ` James Morris
2017-12-04 0:59 ` James Morris
2017-12-04 18:54 ` Paul E. McKenney
2017-12-04 18:54 ` Paul E. McKenney
2017-12-04 18:54 ` Paul E. McKenney
2017-12-01 19:51 ` [PATCH tip/core/rcu 16/21] drivers/infiniband: " Paul E. McKenney
2017-12-01 19:51 ` Paul E. McKenney
[not found] ` <1512157876-24665-16-git-send-email-paulmck-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2017-12-02 0:11 ` Jason Gunthorpe
2017-12-02 0:11 ` Jason Gunthorpe
2017-12-02 1:08 ` Paul E. McKenney
[not found] ` <20171202010851.GL7829-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2017-12-05 15:08 ` Jason Gunthorpe
2017-12-05 15:08 ` Jason Gunthorpe
2017-12-05 20:06 ` Paul E. McKenney
2017-12-01 19:51 ` [PATCH tip/core/rcu 17/21] doc: De-emphasize smp_read_barrier_depends Paul E. McKenney
2017-12-01 19:51 ` [PATCH tip/core/rcu 18/21] genetlink: Remove smp_read_barrier_depends() from comment Paul E. McKenney
2017-12-01 19:51 ` [PATCH tip/core/rcu 19/21] netlink: " Paul E. McKenney
2017-12-01 19:51 ` [PATCH tip/core/rcu 20/21] checkpatch: Add warnings for {smp_,}read_barrier_depends() Paul E. McKenney
2017-12-01 20:14 ` Joe Perches
2017-12-01 21:44 ` Paul E. McKenney
2017-12-02 4:45 ` Joe Perches
2017-12-04 19:06 ` Paul E. McKenney
2017-12-04 19:12 ` Joe Perches
2017-12-01 19:51 ` [PATCH tip/core/rcu 21/21] drivers/vhost: Remove now-redundant read_barrier_depends() Paul E. McKenney
2017-12-01 19:51 ` Paul E. McKenney
2017-12-05 18:31 ` Michael S. Tsirkin
2017-12-05 18:31 ` Michael S. Tsirkin
2017-12-05 18:39 ` Peter Zijlstra
2017-12-05 18:39 ` Peter Zijlstra
2017-12-05 18:57 ` Michael S. Tsirkin
2017-12-05 18:57 ` Michael S. Tsirkin
2017-12-05 19:17 ` Peter Zijlstra
2017-12-05 19:17 ` Peter Zijlstra
2017-12-05 19:24 ` Michael S. Tsirkin
2017-12-05 19:24 ` Michael S. Tsirkin
2017-12-05 19:33 ` Paul E. McKenney
2017-12-05 19:33 ` Paul E. McKenney
2017-12-05 19:51 ` Michael S. Tsirkin
2017-12-05 19:51 ` Michael S. Tsirkin
2017-12-05 19:57 ` Peter Zijlstra
2017-12-05 19:57 ` Peter Zijlstra
2017-12-05 20:28 ` Michael S. Tsirkin
2017-12-05 20:28 ` Michael S. Tsirkin
2017-12-05 21:17 ` Peter Zijlstra
2017-12-05 21:17 ` Peter Zijlstra
2017-12-05 21:42 ` Michael S. Tsirkin
2017-12-05 21:42 ` Michael S. Tsirkin
2017-12-05 20:08 ` Paul E. McKenney
2017-12-05 21:24 ` Michael S. Tsirkin
2017-12-05 21:36 ` Paul E. McKenney
2017-12-05 21:36 ` Paul E. McKenney
2017-12-05 21:43 ` Michael S. Tsirkin
2017-12-05 21:43 ` Michael S. Tsirkin
2017-12-05 22:02 ` Paul E. McKenney
2017-12-05 22:02 ` Paul E. McKenney
2017-12-05 22:09 ` Peter Zijlstra
2017-12-05 22:09 ` Peter Zijlstra
2017-12-05 21:57 ` Peter Zijlstra
2017-12-05 21:57 ` Peter Zijlstra
2017-12-05 22:09 ` Michael S. Tsirkin
2017-12-05 23:39 ` Paul E. McKenney
2017-12-05 23:39 ` Paul E. McKenney
2017-12-05 22:09 ` Michael S. Tsirkin
2017-12-05 21:24 ` Michael S. Tsirkin
2017-12-05 20:08 ` Paul E. McKenney
2017-12-05 19:55 ` Peter Zijlstra
2017-12-05 19:55 ` Peter Zijlstra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171204185215.GB7829@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=edumazet@google.com \
--cc=fweisbec@gmail.com \
--cc=jiangshanlai@gmail.com \
--cc=josh@joshtriplett.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=oleg@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.