Both Documentation/memory-barriers.txt and Documentation/atomic_ops.txt state that atomic_add_unless() implies smp_mb() on each side of the operation.
Is it true? include/asm-most_of/atomic.h: #define atomic_add_unless(v, a, u) \ ({ \ int c, old; \ c = atomic_read(v); \ for (;;) { \ if (unlikely(c == (u))) \ break; \ old = atomic_cmpxchg((v), c, c + (a)); \ if (likely(old == c)) \ break; \ c = old; \ } \ c != (u); \ }) This looks like atomic_add_unless() implies mb() only if it returns 1. Otherwise it could fail (return 0) before the first atomic_cmpxchg(), but atomic_read() provides a compiler barrier only. Could you clarify? Oleg. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/