On Mon, Jun 3, 2019 at 8:26 AM David Laight <David.Laight(a)aculab.com> wrote:
From: Paul E. McKenney
> We do
> occasionally use READ_ONCE() to prevent load-fusing optimizations that
> would otherwise cause the compiler to turn while-loops into if-statements
> guarding infinite loops.
In that case the variable ought to be volatile...
No.
We do not use volatile on variables.
The C people got the semantics wrong, probably because 'volatile' was
historically for IO, not for access atomicity without locking.
It's not the memory location that is volatile, it is really the
_access_ that is volatile.
The same memory location might be completely stable in other access
situations (ie when done under a lock).
In other words, we should *never* use volatile in the kernel. It's
fundamentally mis-designed for modern use.
(Of course, we then can use volatile in a cast in code, which drives
some compiler people crazy, but that's because said compiler people
don't care about reality, they care about some paperwork).
Linus