mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-23 20:53:53 +08:00
bd5c0ba2cd
Commit:bf28ae5627
("tools/memory-model: Remove rb-dep, smp_read_barrier_depends, and lockless_dereference") was merged too early, while it was still in RFC form. This patch adds in the missing pieces. Akira pointed out some typos in the original patch, and he noted that cheatsheet.txt should indicate that READ_ONCE() now implies an address dependency. Andrea suggested documenting the relationship betwwen unsuccessful RMW operations and address dependencies. Andrea pointed out that the macro for rcu_dereference() in linux.def should now use the "once" annotation instead of "deref". He also suggested that the comments should mention commit:5a8897cc76
("locking/atomics/alpha: Add smp_read_barrier_depends() to _release()/_relaxed() atomics") ... as an important precursor, and he contributed commit:cb13b424e9
("locking/xchg/alpha: Add unconditional memory barrier to cmpxchg()") which is another prerequisite. Suggested-by: Akira Yokosawa <akiyks@gmail.com> Suggested-by: Andrea Parri <parri.andrea@gmail.com> Signed-off-by: Alan Stern <stern@rowland.harvard.edu> [ Fixed read_read_lock() typo reported by Akira. ] Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Acked-by: Andrea Parri <parri.andrea@gmail.com> Acked-by: Akira Yokosawa <akiyks@gmail.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: boqun.feng@gmail.com Cc: dhowells@redhat.com Cc: j.alglave@ucl.ac.uk Cc: linux-arch@vger.kernel.org Cc: luc.maranget@inria.fr Cc: npiggin@gmail.com Cc: will.deacon@arm.com Fixes:bf28ae5627
("tools/memory-model: Remove rb-dep, smp_read_barrier_depends, and lockless_dereference") Link: http://lkml.kernel.org/r/1520443660-16858-4-git-send-email-paulmck@linux.vnet.ibm.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
30 lines
1.6 KiB
Plaintext
30 lines
1.6 KiB
Plaintext
Prior Operation Subsequent Operation
|
|
--------------- ---------------------------
|
|
C Self R W RWM Self R W DR DW RMW SV
|
|
-- ---- - - --- ---- - - -- -- --- --
|
|
|
|
Store, e.g., WRITE_ONCE() Y Y
|
|
Load, e.g., READ_ONCE() Y Y Y Y
|
|
Unsuccessful RMW operation Y Y Y Y
|
|
rcu_dereference() Y Y Y Y
|
|
Successful *_acquire() R Y Y Y Y Y Y
|
|
Successful *_release() C Y Y Y W Y
|
|
smp_rmb() Y R Y Y R
|
|
smp_wmb() Y W Y Y W
|
|
smp_mb() & synchronize_rcu() CP Y Y Y Y Y Y Y Y
|
|
Successful full non-void RMW CP Y Y Y Y Y Y Y Y Y Y Y
|
|
smp_mb__before_atomic() CP Y Y Y a a a a Y
|
|
smp_mb__after_atomic() CP a a Y Y Y Y Y
|
|
|
|
|
|
Key: C: Ordering is cumulative
|
|
P: Ordering propagates
|
|
R: Read, for example, READ_ONCE(), or read portion of RMW
|
|
W: Write, for example, WRITE_ONCE(), or write portion of RMW
|
|
Y: Provides ordering
|
|
a: Provides ordering given intervening RMW atomic operation
|
|
DR: Dependent read (address dependency)
|
|
DW: Dependent write (address, data, or control dependency)
|
|
RMW: Atomic read-modify-write operation
|
|
SV Same-variable access
|