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.
More information about the Kernelnewbies