1*1c27b644SPaul E. McKenney Prior Operation Subsequent Operation 2*1c27b644SPaul E. McKenney --------------- --------------------------- 3*1c27b644SPaul E. McKenney C Self R W RWM Self R W DR DW RMW SV 4*1c27b644SPaul E. McKenney __ ---- - - --- ---- - - -- -- --- -- 5*1c27b644SPaul E. McKenney 6*1c27b644SPaul E. McKenneyStore, e.g., WRITE_ONCE() Y Y 7*1c27b644SPaul E. McKenneyLoad, e.g., READ_ONCE() Y Y Y 8*1c27b644SPaul E. McKenneyUnsuccessful RMW operation Y Y Y 9*1c27b644SPaul E. McKenneysmp_read_barrier_depends() Y Y Y 10*1c27b644SPaul E. McKenney*_dereference() Y Y Y Y 11*1c27b644SPaul E. McKenneySuccessful *_acquire() R Y Y Y Y Y Y 12*1c27b644SPaul E. McKenneySuccessful *_release() C Y Y Y W Y 13*1c27b644SPaul E. McKenneysmp_rmb() Y R Y Y R 14*1c27b644SPaul E. McKenneysmp_wmb() Y W Y Y W 15*1c27b644SPaul E. McKenneysmp_mb() & synchronize_rcu() CP Y Y Y Y Y Y Y Y 16*1c27b644SPaul E. McKenneySuccessful full non-void RMW CP Y Y Y Y Y Y Y Y Y Y Y 17*1c27b644SPaul E. McKenneysmp_mb__before_atomic() CP Y Y Y a a a a Y 18*1c27b644SPaul E. McKenneysmp_mb__after_atomic() CP a a Y Y Y Y Y 19*1c27b644SPaul E. McKenney 20*1c27b644SPaul E. McKenney 21*1c27b644SPaul E. McKenneyKey: C: Ordering is cumulative 22*1c27b644SPaul E. McKenney P: Ordering propagates 23*1c27b644SPaul E. McKenney R: Read, for example, READ_ONCE(), or read portion of RMW 24*1c27b644SPaul E. McKenney W: Write, for example, WRITE_ONCE(), or write portion of RMW 25*1c27b644SPaul E. McKenney Y: Provides ordering 26*1c27b644SPaul E. McKenney a: Provides ordering given intervening RMW atomic operation 27*1c27b644SPaul E. McKenney DR: Dependent read (address dependency) 28*1c27b644SPaul E. McKenney DW: Dependent write (address, data, or control dependency) 29*1c27b644SPaul E. McKenney RMW: Atomic read-modify-write operation 30*1c27b644SPaul E. McKenney SV Same-variable access 31