From: "Paul E. McKenney" <paulmck@linux.ibm.com>
To: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
mingo@kernel.org
Cc: stern@rowland.harvard.edu, andrea.parri@amarulasolutions.com,
will.deacon@arm.com, peterz@infradead.org, boqun.feng@gmail.com,
npiggin@gmail.com, dhowells@redhat.com, j.alglave@ucl.ac.uk,
luc.maranget@inria.fr, akiyks@gmail.com,
Jonathan Corbet <corbet@lwn.net>,
"Paul E . McKenney" <paulmck@linux.ibm.com>
Subject: [PATCH RFC memory-model 05/33] Documentation: atomic_t.txt: Explain ordering provided by smp_mb__{before,after}_atomic()
Date: Thu, 30 May 2019 07:41:57 -0700 [thread overview]
Message-ID: <20190530144225.27624-5-paulmck@linux.ibm.com> (raw)
In-Reply-To: <20190530144202.GA26201@linux.ibm.com>
From: Alan Stern <stern@rowland.harvard.edu>
The description of smp_mb__before_atomic() and smp_mb__after_atomic()
in Documentation/atomic_t.txt is slightly terse and misleading. It
does not clearly state which other instructions are ordered by these
barriers.
This improves the text to make the actual ordering implications clear,
and also to explain how these barriers differ from a RELEASE or
ACQUIRE ordering.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Peter Zijlstra <peterz@infradead.org>
Acked-by: Andrea Parri <andrea.parri@amarulasolutions.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.ibm.com>
---
Documentation/atomic_t.txt | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/Documentation/atomic_t.txt b/Documentation/atomic_t.txt
index dca3fb0554db..b3afe69d03a1 100644
--- a/Documentation/atomic_t.txt
+++ b/Documentation/atomic_t.txt
@@ -187,8 +187,14 @@ The barriers:
smp_mb__{before,after}_atomic()
-only apply to the RMW ops and can be used to augment/upgrade the ordering
-inherent to the used atomic op. These barriers provide a full smp_mb().
+only apply to the RMW atomic ops and can be used to augment/upgrade the
+ordering inherent to the op. These barriers act almost like a full smp_mb():
+smp_mb__before_atomic() orders all earlier accesses against the RMW op
+itself and all accesses following it, and smp_mb__after_atomic() orders all
+later accesses against the RMW op and all accesses preceding it. However,
+accesses between the smp_mb__{before,after}_atomic() and the RMW op are not
+ordered, so it is advisable to place the barrier right next to the RMW atomic
+op whenever possible.
These helper barriers exist because architectures have varying implicit
ordering on their SMP atomic primitives. For example our TSO architectures
@@ -212,7 +218,9 @@ Further, while something like:
atomic_dec(&X);
is a 'typical' RELEASE pattern, the barrier is strictly stronger than
-a RELEASE. Similarly for something like:
+a RELEASE because it orders preceding instructions against both the read
+and write parts of the atomic_dec(), and against all following instructions
+as well. Similarly, something like:
atomic_inc(&X);
smp_mb__after_atomic();
@@ -244,7 +252,8 @@ strictly stronger than ACQUIRE. As illustrated:
This should not happen; but a hypothetical atomic_inc_acquire() --
(void)atomic_fetch_inc_acquire() for instance -- would allow the outcome,
-since then:
+because it would not order the W part of the RMW against the following
+WRITE_ONCE. Thus:
P1 P2
--
2.17.1
next prev parent reply other threads:[~2019-05-30 14:43 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-30 14:42 [PATCH RFC memory-model 0/33] LKMM updates for review Paul E. McKenney
2019-05-30 14:41 ` [PATCH RFC memory-model 01/33] tools/memory-model: Prepare for data-race detection Paul E. McKenney
2019-05-30 14:41 ` [PATCH RFC memory-model 02/33] tools/memory-model: Add definitions of plain and marked accesses Paul E. McKenney
2019-05-30 14:41 ` [PATCH RFC memory-model 03/33] tools/memory-model: Add data-race detection Paul E. McKenney
2019-05-30 14:41 ` [PATCH RFC memory-model 04/33] tools/memory-model: Make scripts be executable Paul E. McKenney
2019-05-30 14:41 ` Paul E. McKenney [this message]
2019-05-30 14:41 ` [PATCH RFC memory-model 06/33] tools/memory-model: Fix comment in MP+poonceonces.litmus Paul E. McKenney
2019-05-30 14:41 ` [PATCH RFC memory-model 07/33] tools/memory-model: Do not use "herd" to refer to "herd7" Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 08/33] tools/memory-model: Make judgelitmus.sh note timeouts Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 09/33] tools/memory-model: Make cmplitmushist.sh " Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 10/33] tools/memory-model: Make judgelitmus.sh identify bad macros Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 11/33] tools/memory-model: Make judgelitmus.sh detect hard deadlocks Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 12/33] tools/memory-model: Fix paulmck email address on pre-existing scripts Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 13/33] tools/memory-model: Update parseargs.sh for hardware verification Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 14/33] tools/memory-model: Make judgelitmus.sh handle hardware verifications Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 15/33] tools/memory-model: Add simpletest.sh to check locking, RCU, and SRCU Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 16/33] tools/memory-model: Fix checkalllitmus.sh comment Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 17/33] tools/memory-model: Hardware checking for check{,all}litmus.sh Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 18/33] tools/memory-model: Make judgelitmus.sh ransack .litmus.out files Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 19/33] tools/memory-model: Split runlitmus.sh out of checklitmus.sh Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 20/33] tools/memory-model: Make runlitmus.sh generate .litmus.out for --hw Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 21/33] tools/memory-model: Move from .AArch64.litmus.out to .litmus.AArch.out Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 22/33] tools/memory-model: Keep assembly-language litmus tests Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 23/33] tools/memory-model: Allow herd to deduce CPU type Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 24/33] tools/memory-model: Make runlitmus.sh check for jingle errors Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 25/33] tools/memory-model: Add -v flag to jingle7 runs Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 26/33] tools/memory-model: Implement --hw support for checkghlitmus.sh Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 27/33] tools/memory-model: Fix scripting --jobs argument Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 28/33] tools/memory-model: Make checkghlitmus.sh use mselect7 Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 29/33] tools/memory-model: Make history-check scripts " Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 30/33] tools/memory-model: Add "--" to parseargs.sh for additional arguments Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 31/33] tools/memory-model: Repair parseargs.sh header comment Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 32/33] tools/memory-model: Add checktheselitmus.sh to run specified litmus tests Paul E. McKenney
2019-05-30 14:42 ` [PATCH RFC memory-model 33/33] tools/memory-model: Add data-race capabilities to judgelitmus.sh Paul E. McKenney
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=20190530144225.27624-5-paulmck@linux.ibm.com \
--to=paulmck@linux.ibm.com \
--cc=akiyks@gmail.com \
--cc=andrea.parri@amarulasolutions.com \
--cc=boqun.feng@gmail.com \
--cc=corbet@lwn.net \
--cc=dhowells@redhat.com \
--cc=j.alglave@ucl.ac.uk \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luc.maranget@inria.fr \
--cc=mingo@kernel.org \
--cc=npiggin@gmail.com \
--cc=peterz@infradead.org \
--cc=stern@rowland.harvard.edu \
--cc=will.deacon@arm.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome