Documentation/atomic_t: Emphasize that failed atomic operations give no ordering
The ORDERING section of Documentation/atomic_t.txt can easily be read as saying that conditional atomic RMW operations that fail are ordered when those operations have the _acquire() or _release() suffixes. This is not the case, therefore update this section to make it clear that failed conditional atomic RMW operations provide no ordering. Reported-by: Anna-Maria Behnsen <anna-maria@linutronix.de> Signed-off-by: Paul E. McKenney <paulmck@kernel.org> Cc: Alan Stern <stern@rowland.harvard.edu> Cc: Will Deacon <will@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Boqun Feng <boqun.feng@gmail.com> Cc: Nicholas Piggin <npiggin@gmail.com> Cc: David Howells <dhowells@redhat.com> Cc: Jade Alglave <j.alglave@ucl.ac.uk> Cc: Luc Maranget <luc.maranget@inria.fr> Cc: "Paul E. McKenney" <paulmck@kernel.org> Cc: Akira Yokosawa <akiyks@gmail.com> Cc: Daniel Lustig <dlustig@nvidia.com> Cc: Joel Fernandes <joel@joelfernandes.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Jonathan Corbet <corbet@lwn.net> Cc: <linux-arch@vger.kernel.org> Cc: <linux-doc@vger.kernel.org> Acked-by: Andrea Parri <parri.andrea@gmail.com> Acked-by: Mark Rutland <mark.rutland@arm.com>
This commit is contained in:
parent
293f5bc271
commit
d372e20433
@ -171,14 +171,14 @@ The rule of thumb:
|
|||||||
- RMW operations that are conditional are unordered on FAILURE,
|
- RMW operations that are conditional are unordered on FAILURE,
|
||||||
otherwise the above rules apply.
|
otherwise the above rules apply.
|
||||||
|
|
||||||
Except of course when an operation has an explicit ordering like:
|
Except of course when a successful operation has an explicit ordering like:
|
||||||
|
|
||||||
{}_relaxed: unordered
|
{}_relaxed: unordered
|
||||||
{}_acquire: the R of the RMW (or atomic_read) is an ACQUIRE
|
{}_acquire: the R of the RMW (or atomic_read) is an ACQUIRE
|
||||||
{}_release: the W of the RMW (or atomic_set) is a RELEASE
|
{}_release: the W of the RMW (or atomic_set) is a RELEASE
|
||||||
|
|
||||||
Where 'unordered' is against other memory locations. Address dependencies are
|
Where 'unordered' is against other memory locations. Address dependencies are
|
||||||
not defeated.
|
not defeated. Conditional operations are still unordered on FAILURE.
|
||||||
|
|
||||||
Fully ordered primitives are ordered against everything prior and everything
|
Fully ordered primitives are ordered against everything prior and everything
|
||||||
subsequent. Therefore a fully ordered primitive is like having an smp_mb()
|
subsequent. Therefore a fully ordered primitive is like having an smp_mb()
|
||||||
|
Loading…
Reference in New Issue
Block a user