1*1c27b644SPaul E. McKenneyThis directory contains the following litmus tests: 2*1c27b644SPaul E. McKenney 3*1c27b644SPaul E. McKenneyCoRR+poonceonce+Once.litmus 4*1c27b644SPaul E. McKenney Test of read-read coherence, that is, whether or not two 5*1c27b644SPaul E. McKenney successive reads from the same variable are ordered. 6*1c27b644SPaul E. McKenney 7*1c27b644SPaul E. McKenneyCoRW+poonceonce+Once.litmus 8*1c27b644SPaul E. McKenney Test of read-write coherence, that is, whether or not a read 9*1c27b644SPaul E. McKenney from a given variable followed by a write to that same variable 10*1c27b644SPaul E. McKenney are ordered. 11*1c27b644SPaul E. McKenney 12*1c27b644SPaul E. McKenneyCoWR+poonceonce+Once.litmus 13*1c27b644SPaul E. McKenney Test of write-read coherence, that is, whether or not a write 14*1c27b644SPaul E. McKenney to a given variable followed by a read from that same variable 15*1c27b644SPaul E. McKenney are ordered. 16*1c27b644SPaul E. McKenney 17*1c27b644SPaul E. McKenneyCoWW+poonceonce.litmus 18*1c27b644SPaul E. McKenney Test of write-write coherence, that is, whether or not two 19*1c27b644SPaul E. McKenney successive writes to the same variable are ordered. 20*1c27b644SPaul E. McKenney 21*1c27b644SPaul E. McKenneyIRIW+mbonceonces+OnceOnce.litmus 22*1c27b644SPaul E. McKenney Test of independent reads from independent writes with smp_mb() 23*1c27b644SPaul E. McKenney between each pairs of reads. In other words, is smp_mb() 24*1c27b644SPaul E. McKenney sufficient to cause two different reading processes to agree on 25*1c27b644SPaul E. McKenney the order of a pair of writes, where each write is to a different 26*1c27b644SPaul E. McKenney variable by a different process. 27*1c27b644SPaul E. McKenney 28*1c27b644SPaul E. McKenneyIRIW+poonceonces+OnceOnce.litmus 29*1c27b644SPaul E. McKenney Test of independent reads from independent writes with nothing 30*1c27b644SPaul E. McKenney between each pairs of reads. In other words, is anything at all 31*1c27b644SPaul E. McKenney needed to cause two different reading processes to agree on the 32*1c27b644SPaul E. McKenney order of a pair of writes, where each write is to a different 33*1c27b644SPaul E. McKenney variable by a different process. 34*1c27b644SPaul E. McKenney 35*1c27b644SPaul E. McKenneyISA2+poonceonces.litmus 36*1c27b644SPaul E. McKenney As below, but with store-release replaced with WRITE_ONCE() 37*1c27b644SPaul E. McKenney and load-acquire replaced with READ_ONCE(). 38*1c27b644SPaul E. McKenney 39*1c27b644SPaul E. McKenneyISA2+pooncerelease+poacquirerelease+poacquireonce.litmus 40*1c27b644SPaul E. McKenney Can a release-acquire chain order a prior store against 41*1c27b644SPaul E. McKenney a later load? 42*1c27b644SPaul E. McKenney 43*1c27b644SPaul E. McKenneyLB+ctrlonceonce+mbonceonce.litmus 44*1c27b644SPaul E. McKenney Does a control dependency and an smp_mb() suffice for the 45*1c27b644SPaul E. McKenney load-buffering litmus test, where each process reads from one 46*1c27b644SPaul E. McKenney of two variables then writes to the other? 47*1c27b644SPaul E. McKenney 48*1c27b644SPaul E. McKenneyLB+poacquireonce+pooncerelease.litmus 49*1c27b644SPaul E. McKenney Does a release-acquire pair suffice for the load-buffering 50*1c27b644SPaul E. McKenney litmus test, where each process reads from one of two variables then 51*1c27b644SPaul E. McKenney writes to the other? 52*1c27b644SPaul E. McKenney 53*1c27b644SPaul E. McKenneyLB+poonceonces.litmus 54*1c27b644SPaul E. McKenney As above, but with store-release replaced with WRITE_ONCE() 55*1c27b644SPaul E. McKenney and load-acquire replaced with READ_ONCE(). 56*1c27b644SPaul E. McKenney 57*1c27b644SPaul E. McKenneyMP+onceassign+derefonce.litmus 58*1c27b644SPaul E. McKenney As below, but with rcu_assign_pointer() and an rcu_dereference(). 59*1c27b644SPaul E. McKenney 60*1c27b644SPaul E. McKenneyMP+polocks.litmus 61*1c27b644SPaul E. McKenney As below, but with the second access of the writer process 62*1c27b644SPaul E. McKenney and the first access of reader process protected by a lock. 63*1c27b644SPaul E. McKenney 64*1c27b644SPaul E. McKenneyMP+poonceonces.litmus 65*1c27b644SPaul E. McKenney As below, but without the smp_rmb() and smp_wmb(). 66*1c27b644SPaul E. McKenney 67*1c27b644SPaul E. McKenneyMP+pooncerelease+poacquireonce.litmus 68*1c27b644SPaul E. McKenney As below, but with a release-acquire chain. 69*1c27b644SPaul E. McKenney 70*1c27b644SPaul E. McKenneyMP+porevlocks.litmus 71*1c27b644SPaul E. McKenney As below, but with the first access of the writer process 72*1c27b644SPaul E. McKenney and the second access of reader process protected by a lock. 73*1c27b644SPaul E. McKenney 74*1c27b644SPaul E. McKenneyMP+wmbonceonce+rmbonceonce.litmus 75*1c27b644SPaul E. McKenney Does a smp_wmb() (between the stores) and an smp_rmb() (between 76*1c27b644SPaul E. McKenney the loads) suffice for the message-passing litmus test, where one 77*1c27b644SPaul E. McKenney process writes data and then a flag, and the other process reads 78*1c27b644SPaul E. McKenney the flag and then the data. (This is similar to the ISA2 tests, 79*1c27b644SPaul E. McKenney but with two processes instead of three.) 80*1c27b644SPaul E. McKenney 81*1c27b644SPaul E. McKenneyR+mbonceonces.litmus 82*1c27b644SPaul E. McKenney This is the fully ordered (via smp_mb()) version of one of 83*1c27b644SPaul E. McKenney the classic counterintuitive litmus tests that illustrates the 84*1c27b644SPaul E. McKenney effects of store propagation delays. 85*1c27b644SPaul E. McKenney 86*1c27b644SPaul E. McKenneyR+poonceonces.litmus 87*1c27b644SPaul E. McKenney As above, but without the smp_mb() invocations. 88*1c27b644SPaul E. McKenney 89*1c27b644SPaul E. McKenneySB+mbonceonces.litmus 90*1c27b644SPaul E. McKenney This is the fully ordered (again, via smp_mb() version of store 91*1c27b644SPaul E. McKenney buffering, which forms the core of Dekker's mutual-exclusion 92*1c27b644SPaul E. McKenney algorithm. 93*1c27b644SPaul E. McKenney 94*1c27b644SPaul E. McKenneySB+poonceonces.litmus 95*1c27b644SPaul E. McKenney As above, but without the smp_mb() invocations. 96*1c27b644SPaul E. McKenney 97*1c27b644SPaul E. McKenneyS+poonceonces.litmus 98*1c27b644SPaul E. McKenney As below, but without the smp_wmb() and acquire load. 99*1c27b644SPaul E. McKenney 100*1c27b644SPaul E. McKenneyS+wmbonceonce+poacquireonce.litmus 101*1c27b644SPaul E. McKenney Can a smp_wmb(), instead of a release, and an acquire order 102*1c27b644SPaul E. McKenney a prior store against a subsequent store? 103*1c27b644SPaul E. McKenney 104*1c27b644SPaul E. McKenneyWRC+poonceonces+Once.litmus 105*1c27b644SPaul E. McKenneyWRC+pooncerelease+rmbonceonce+Once.litmus 106*1c27b644SPaul E. McKenney These two are members of an extension of the MP litmus-test class 107*1c27b644SPaul E. McKenney in which the first write is moved to a separate process. 108*1c27b644SPaul E. McKenney 109*1c27b644SPaul E. McKenneyZ6.0+pooncelock+pooncelock+pombonce.litmus 110*1c27b644SPaul E. McKenney Is the ordering provided by a spin_unlock() and a subsequent 111*1c27b644SPaul E. McKenney spin_lock() sufficient to make ordering apparent to accesses 112*1c27b644SPaul E. McKenney by a process not holding the lock? 113*1c27b644SPaul E. McKenney 114*1c27b644SPaul E. McKenneyZ6.0+pooncelock+poonceLock+pombonce.litmus 115*1c27b644SPaul E. McKenney As above, but with smp_mb__after_spinlock() immediately 116*1c27b644SPaul E. McKenney following the spin_lock(). 117*1c27b644SPaul E. McKenney 118*1c27b644SPaul E. McKenneyZ6.0+pooncerelease+poacquirerelease+mbonceonce.litmus 119*1c27b644SPaul E. McKenney Is the ordering provided by a release-acquire chain sufficient 120*1c27b644SPaul E. McKenney to make ordering apparent to accesses by a process that does 121*1c27b644SPaul E. McKenney not participate in that release-acquire chain? 122*1c27b644SPaul E. McKenney 123*1c27b644SPaul E. McKenneyA great many more litmus tests are available here: 124*1c27b644SPaul E. McKenney 125*1c27b644SPaul E. McKenney https://github.com/paulmckrcu/litmus 126