spinlock variable protection

Nicholas Mc Guire der.herr at hofr.at
Sat Jan 31 07:04:20 EST 2015


On Fri, 30 Jan 2015, Matwey V. Kornilov wrote:

> 2015-01-30 16:52 GMT+03:00 buyitian <buyitian at gmail.com>:
> >>
> > Please check the assembly code to double confirm the GCC behavior.
> > Why will GCC change the order as what you mentioned? Only assembly code can tell you.
> 
> It does not change at the moment. I think it can change it.
> 
> Because from line
>   ret = hdl->count;
> until line
>   return ret;
> there is no access to either ret or hdl->count. So it is reasonable to
> optimizer to think that their values are the same and eliminate
> unneeded variable.
>
If your worry is that it will optimize it out then pack it into
an ACCESS_ONCE and that should prevent GCC from doing so.
for your case I think ret = ACCESS_ONCE(hdl->count);
would be sufficient.

thx!
hofrat 



More information about the Kernelnewbies mailing list