Messages in this thread |  | | | Date | Fri, 11 Jun 2010 14:06:01 -0700 | | From | "H. Peter Anvin" <> | | Subject | Re: sequence lock in Linux |
| |
On 06/11/2010 01:36 PM, Paul E. McKenney wrote: > > The reason that the C standard permits this is to allow for things like > 8-bit CPUs, which are simply unable to load or store 32-bit quantities > except by doing it chunkwise. But I don't expect the Linux kernel to > boot on these, and certainly not on any of the ones that I have used! > > I most definitely remember seeing a gcc guarantee that loads and stores > would be done in one instruction whenever the hardware supported this, > but I am not finding it today. :-( >
What gcc does not -- and should not -- guarantee is that accessing a non-volatile member is done exactly once. As Mathieu pointed out, it can choose to drop it due to register pressure and load it again.
What is possibly a much bigger risk -- since this is an inline -- is that the value is cached from a previous piece of code, *or* that since the structure is const(!) that the second read in the repeat loop is elided. Presumably current versions of gcc don't do that across a memory clobber, but that doesn't seem entirely out of the question.
-hpa
|  |