xref: /openbmc/linux/tools/memory-model/Documentation/cheatsheet.txt (revision 1c27b644c0fdbc61e113b8faee14baeb8df32486)
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