[PATCH] arm64: mm: Use READ_ONCE/WRITE_ONCE when accessing page tables

Marc Zyngier marc.zyngier at arm.com
Thu Feb 15 10:59:55 PST 2018

On 15/02/18 11:14, Will Deacon wrote:
> In many cases, page tables can be accessed concurrently by either another
> CPU (due to things like fast gup) or by the hardware page table walker
> itself, which may set access/dirty bits. In such cases, it is important
> to use READ_ONCE/WRITE_ONCE when accessing page table entries so that
> entries cannot be torn, merged or subject to apparent loss of coherence
> due to compiler transformations.
> Whilst there are some scenarios where this cannot happen (e.g. pinned
> kernel mappings for the linear region), the overhead of using READ_ONCE
> /WRITE_ONCE everywhere is minimal and makes the code an awful lot easier
> to reason about. This patch consistently uses these macros in the arch
> code, as well as explicitly namespacing pointers to page table entries
> from the entries themselves by using adopting a 'p' suffix for the former
> (as is sometimes used elsewhere in the kernel source).
> Cc: Marc Zyngier <marc.zyngier at arm.com>
> Tested-by: Yury Norov <ynorov at caviumnetworks.com>
> Tested-by: Richard Ruigrok <rruigrok at codeaurora.org>
> Signed-off-by: Will Deacon <will.deacon at arm.com>

Reviewed-by: Marc Zyngier <marc.zyngier at arm.com>

Jazz is not dead. It just smells funny...

More information about the linux-arm-kernel mailing list