On Tue, 14 Aug 2007, Chris Snook wrote:
volatile means that there is some vague notion of "read it now". But thatFrom my reply in the other thread...
really does not exist. Instead we control visibility via barriers (smp_wmb,
smp_rmb). Would it not be best to not have volatile at all in atomic
operations and let the barriers do the work?
But barriers force a flush of *everything* in scope, which we generally don't
want. On the other hand, we pretty much always want to flush atomic_*
operations. One way or another, we should be restricting the volatile
behavior to the thing that needs it. On most architectures, this patch set
just moves that from the declaration, where it is considered harmful, to the
use, where it is considered an occasional necessary evil.
If you really, *really* distrust the compiler that much, you shouldn't be
using barrier, since that uses volatile under the hood too. You should just
go ahead and implement the atomic operations in assembler, like Segher
Boessenkool did for powerpc in response to my previous patchset.
From my reply on the other thread:
Maybe we need two read functions? One volatile, one not?
The atomic_read()s that I have in slub really do not care about when the variables are read. And if volatile creates overhead then I rather not have it.