On Mon, Jun 3, 2019 at 8:26 AM David Laight 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