Herbert Xu writes:
On Fri, Aug 17, 2007 at 03:09:57PM +1000, Paul Mackerras wrote:
quoted
Herbert Xu writes:
quoted
Can you find an actual atomic_read code snippet there that is
broken without the volatile modifier?
There are some in arch-specific code, for example line 1073 of
arch/mips/kernel/smtc.c. On mips, cpu_relax() is just barrier(), so
the empty loop body is ok provided that atomic_read actually does the
load each time around the loop.
A barrier() is all you need to force the compiler to reread
the value.
The people advocating volatile in this thread are talking
about code that doesn't use barrier()/cpu_relax().
Did you look at it? Here it is:
/* Someone else is initializing in parallel - let 'em finish */
while (atomic_read(&idle_hook_initialized) < 1000)
;
Paul.