On Wed, Jul 26, 2017 at 08:47:50PM +0800, Boqun Feng wrote: > > + > > +Further, while something like: > > + > > + smp_mb__before_atomic(); > > + atomic_dec(&X); > > + > > +is a 'typical' RELEASE pattern, the barrier is strictly stronger than > > +a RELEASE. Similarly for something like: > > + > > .. at here. Maybe you planned to put stronger ACQUIRE pattern?
Yes, although I struggled to find a sensible one. The problem is that ACQUIRE is on loads and value returning atomics have an ACQUIRE variant, so why would you ever want to use smp_mb__after_atomic() for this. That is, the best I could come up with is something like: val = atomic_fetch_or_relaxed(1, &var); smp_mb__after_atomic(); But in that case we should've just written: val = atomic_fetch_or_acquire(1, &var); Suggestions?