Re: [PATCH 0/24] make atomic_read() behave consistently across all architectures
From: Paul Mackerras <hidden>
Date: 2007-08-15 23:23:30
Also in:
linux-arch, lkml
From: Paul Mackerras <hidden>
Date: 2007-08-15 23:23:30
Also in:
linux-arch, lkml
Satyam Sharma writes:
quoted
Doesn't "atomic WRT all processors" require volatility?No, it definitely doesn't. Why should it? "Atomic w.r.t. all processors" is just your normal, simple "atomicity" for SMP systems (ensure that that object is modified / set / replaced in main memory atomically) and has nothing to do with "volatile" behaviour.
Atomic variables are "volatile" in the sense that they are liable to be changed at any time by mechanisms that are outside the knowledge of the C compiler, namely, other CPUs, or this CPU executing an interrupt routine. In the kernel we use atomic variables in precisely those situations where a variable is potentially accessed concurrently by multiple CPUs, and where each CPU needs to see updates done by other CPUs in a timely fashion. That is what they are for. Therefore the compiler must not cache values of atomic variables in registers; each atomic_read must result in a load and each atomic_set must result in a store. Anything else will just lead to subtle bugs. I have no strong opinion about whether or not the best way to achieve this is through the use of the "volatile" C keyword. Segher's idea of using asm instead seems like a good one to me. Paul.