1e30d0235SBoqun FengC Atomic-RMW+mb__after_atomic-is-stronger-than-acquire 2e30d0235SBoqun Feng 3e30d0235SBoqun Feng(* 4e30d0235SBoqun Feng * Result: Never 5e30d0235SBoqun Feng * 6e30d0235SBoqun Feng * Test that an atomic RMW followed by a smp_mb__after_atomic() is 7e30d0235SBoqun Feng * stronger than a normal acquire: both the read and write parts of 8e30d0235SBoqun Feng * the RMW are ordered before the subsequential memory accesses. 9e30d0235SBoqun Feng *) 10e30d0235SBoqun Feng 11e30d0235SBoqun Feng{ 12e30d0235SBoqun Feng} 13e30d0235SBoqun Feng 14e30d0235SBoqun FengP0(int *x, atomic_t *y) 15e30d0235SBoqun Feng{ 16e30d0235SBoqun Feng int r0; 17e30d0235SBoqun Feng int r1; 18e30d0235SBoqun Feng 19e30d0235SBoqun Feng r0 = READ_ONCE(*x); 20e30d0235SBoqun Feng smp_rmb(); 21e30d0235SBoqun Feng r1 = atomic_read(y); 22e30d0235SBoqun Feng} 23e30d0235SBoqun Feng 24e30d0235SBoqun FengP1(int *x, atomic_t *y) 25e30d0235SBoqun Feng{ 26e30d0235SBoqun Feng atomic_inc(y); 27e30d0235SBoqun Feng smp_mb__after_atomic(); 28e30d0235SBoqun Feng WRITE_ONCE(*x, 1); 29e30d0235SBoqun Feng} 30e30d0235SBoqun Feng 31e30d0235SBoqun Fengexists 32e30d0235SBoqun Feng(0:r0=1 /\ 0:r1=0) 33