1*7e7eb5aeSPaul E. McKenneyC RM-fixed 2*7e7eb5aeSPaul E. McKenney 3*7e7eb5aeSPaul E. McKenney(* 4*7e7eb5aeSPaul E. McKenney * Result: Never 5*7e7eb5aeSPaul E. McKenney * 6*7e7eb5aeSPaul E. McKenney * This litmus test demonstrates that the old "roach motel" approach 7*7e7eb5aeSPaul E. McKenney * to locking, where code can be freely moved into critical sections, 8*7e7eb5aeSPaul E. McKenney * cannot be used in the Linux kernel. 9*7e7eb5aeSPaul E. McKenney *) 10*7e7eb5aeSPaul E. McKenney 11*7e7eb5aeSPaul E. McKenney{ 12*7e7eb5aeSPaul E. McKenney int x; 13*7e7eb5aeSPaul E. McKenney atomic_t y; 14*7e7eb5aeSPaul E. McKenney} 15*7e7eb5aeSPaul E. McKenney 16*7e7eb5aeSPaul E. McKenneyP0(int *x, atomic_t *y, spinlock_t *lck) 17*7e7eb5aeSPaul E. McKenney{ 18*7e7eb5aeSPaul E. McKenney int r2; 19*7e7eb5aeSPaul E. McKenney 20*7e7eb5aeSPaul E. McKenney spin_lock(lck); 21*7e7eb5aeSPaul E. McKenney r2 = atomic_inc_return(y); 22*7e7eb5aeSPaul E. McKenney WRITE_ONCE(*x, 1); 23*7e7eb5aeSPaul E. McKenney spin_unlock(lck); 24*7e7eb5aeSPaul E. McKenney} 25*7e7eb5aeSPaul E. McKenney 26*7e7eb5aeSPaul E. McKenneyP1(int *x, atomic_t *y, spinlock_t *lck) 27*7e7eb5aeSPaul E. McKenney{ 28*7e7eb5aeSPaul E. McKenney int r0; 29*7e7eb5aeSPaul E. McKenney int r1; 30*7e7eb5aeSPaul E. McKenney int r2; 31*7e7eb5aeSPaul E. McKenney 32*7e7eb5aeSPaul E. McKenney r0 = READ_ONCE(*x); 33*7e7eb5aeSPaul E. McKenney r1 = READ_ONCE(*x); 34*7e7eb5aeSPaul E. McKenney spin_lock(lck); 35*7e7eb5aeSPaul E. McKenney r2 = atomic_inc_return(y); 36*7e7eb5aeSPaul E. McKenney spin_unlock(lck); 37*7e7eb5aeSPaul E. McKenney} 38*7e7eb5aeSPaul E. McKenney 39*7e7eb5aeSPaul E. McKenneylocations [x;0:r2;1:r0;1:r1;1:r2] 40*7e7eb5aeSPaul E. McKenneyfilter (1:r0=0 /\ 1:r1=1) 41*7e7eb5aeSPaul E. McKenneyexists (1:r2=1) 42