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 41c27b644SPaul E. McKenney __ ---- - - --- ---- - - -- -- --- -- 51c27b644SPaul E. McKenney 61c27b644SPaul E. McKenneyStore, e.g., WRITE_ONCE() Y Y 71c27b644SPaul E. McKenneyLoad, e.g., READ_ONCE() Y Y Y 81c27b644SPaul E. McKenneyUnsuccessful RMW operation Y Y Y 91c27b644SPaul E. McKenneysmp_read_barrier_depends() Y Y Y 101c27b644SPaul E. McKenney*_dereference() Y Y Y Y 111c27b644SPaul E. McKenneySuccessful *_acquire() R Y Y Y Y Y Y 121c27b644SPaul E. McKenneySuccessful *_release() C Y Y Y W Y 131c27b644SPaul E. McKenneysmp_rmb() Y R Y Y R 141c27b644SPaul E. McKenneysmp_wmb() Y W Y Y W 151c27b644SPaul E. McKenneysmp_mb() & synchronize_rcu() CP Y Y Y Y Y Y Y Y 161c27b644SPaul E. McKenneySuccessful full non-void RMW CP Y Y Y Y Y Y Y Y Y Y Y 171c27b644SPaul E. McKenneysmp_mb__before_atomic() CP Y Y Y a a a a Y 181c27b644SPaul E. McKenneysmp_mb__after_atomic() CP a a Y Y Y Y Y 191c27b644SPaul E. McKenney 201c27b644SPaul E. McKenney 211c27b644SPaul E. McKenneyKey: C: Ordering is cumulative 221c27b644SPaul E. McKenney P: Ordering propagates 231c27b644SPaul E. McKenney R: Read, for example, READ_ONCE(), or read portion of RMW 241c27b644SPaul E. McKenney W: Write, for example, WRITE_ONCE(), or write portion of RMW 251c27b644SPaul E. McKenney Y: Provides ordering 261c27b644SPaul E. McKenney a: Provides ordering given intervening RMW atomic operation 271c27b644SPaul E. McKenney DR: Dependent read (address dependency) 281c27b644SPaul E. McKenney DW: Dependent write (address, data, or control dependency) 291c27b644SPaul E. McKenney RMW: Atomic read-modify-write operation 301c27b644SPaul E. McKenney SV Same-variable access 31