Will two READ_ONCE()s in a row execute in order
FMDF
fmdefrancesco at gmail.com
Mon Oct 25 07:33:15 EDT 2021
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
More information about the Kernelnewbies
mailing list