Will two READ_ONCE()s in a row execute in order

Zhang Zeren zhangzr23 at gmail.com
Mon Oct 25 08:17:21 EDT 2021


Thanks for your reply! I should have read more carefully... Besides, do you
know where can I find the specific rules of LKMM? Now it seems that two
irrelevant READ_ONCE()s can execute out of order, what about two
WRITE_ONCE()? or a READ_ONCE() followed by a WRITE_ONCE()? etc... Intel
gave several examples in it's manual (Volume 3, 8.2.3). Does LKMM provide
similar examples?

FMDF <fmdefrancesco at gmail.com> 于2021年10月25日周一 下午7:33写道:

> On Mon, Oct 25, 2021 at 10:33 AM Zhang Zeren <zhangzr23 at gmail.com> wrote:
> >
> > Hi, I read an example in the Documentation/memory-barriers.txt, which
> says
> >>
> >>  (*) On any given CPU, dependent memory accesses will be issued in
> order, with
> >>      respect to itself.  This means that for:
>
> "dependent" _is_ the key to understanding this topic. As Valentin
> Vidić wrote, your loads are _not_ dependent and / or related in any
> way.
>
> > As far as  I understand it, linux kernel memory model (LKMM) guarantee
> two read operations
> > execute in order. And if the CPU architecture offer an looser memory
> ordering (like Alpha), then
> > the compiler must help to add a memory barrier after the load
> instruction to fufill the LKMM's
> > standard.
>
> No, adding a memory barrier is not a compiler job, instead it is up to
> the kernel code.
> For instance, please take a look at the implementation of
> __READ_ONCE() for Alpha in arch/alpha/include/asm/rwonce.h (note that
> __READ_ONCE() is used by READ_ONCE()).
>
> Regards,
>
> Fabio M. De Francesco
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20211025/03f16c39/attachment.html>


More information about the Kernelnewbies mailing list