11c27b644SPaul E. McKenney Prior Operation Subsequent Operation 21c27b644SPaul E. McKenney --------------- --------------------------- 31c27b644SPaul E. McKenney C Self R W RWM Self R W DR DW RMW SV 4*bd5c0ba2SAlan Stern -- ---- - - --- ---- - - -- -- --- -- 51c27b644SPaul E. McKenney 61c27b644SPaul E. McKenneyStore, e.g., WRITE_ONCE() Y Y 7*bd5c0ba2SAlan SternLoad, e.g., READ_ONCE() Y Y Y Y 8*bd5c0ba2SAlan SternUnsuccessful RMW operation Y Y Y Y 9bf28ae56SAlan Sternrcu_dereference() Y Y Y Y 101c27b644SPaul E. McKenneySuccessful *_acquire() R Y Y Y Y Y Y 111c27b644SPaul E. McKenneySuccessful *_release() C Y Y Y W Y 121c27b644SPaul E. McKenneysmp_rmb() Y R Y Y R 131c27b644SPaul E. McKenneysmp_wmb() Y W Y Y W 141c27b644SPaul E. McKenneysmp_mb() & synchronize_rcu() CP Y Y Y Y Y Y Y Y 151c27b644SPaul E. McKenneySuccessful full non-void RMW CP Y Y Y Y Y Y Y Y Y Y Y 161c27b644SPaul E. McKenneysmp_mb__before_atomic() CP Y Y Y a a a a Y 171c27b644SPaul E. McKenneysmp_mb__after_atomic() CP a a Y Y Y Y Y 181c27b644SPaul E. McKenney 191c27b644SPaul E. McKenney 201c27b644SPaul E. McKenneyKey: C: Ordering is cumulative 211c27b644SPaul E. McKenney P: Ordering propagates 221c27b644SPaul E. McKenney R: Read, for example, READ_ONCE(), or read portion of RMW 231c27b644SPaul E. McKenney W: Write, for example, WRITE_ONCE(), or write portion of RMW 241c27b644SPaul E. McKenney Y: Provides ordering 251c27b644SPaul E. McKenney a: Provides ordering given intervening RMW atomic operation 261c27b644SPaul E. McKenney DR: Dependent read (address dependency) 271c27b644SPaul E. McKenney DW: Dependent write (address, data, or control dependency) 281c27b644SPaul E. McKenney RMW: Atomic read-modify-write operation 291c27b644SPaul E. McKenney SV Same-variable access 30