arm64: mm: avoid redundant READ_ONCE(*ptep)
authorMark Rutland <mark.rutland@arm.com>
Mon, 10 Jun 2019 12:41:07 +0000 (13:41 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Mon, 10 Jun 2019 12:55:34 +0000 (13:55 +0100)
commit9b604722059039a1a3ff69fb8dfd024264046024
tree1e4a434e73e4d583d935a5b3e34825c0dd0fb86a
parent4745224b45097d333358bce298aea2137246183c
arm64: mm: avoid redundant READ_ONCE(*ptep)

In set_pte_at(), we read the old pte value so that it can be passed into
checks for racy hw updates. These checks are only performed for
CONFIG_DEBUG_VM, and the value is not used otherwise.

Since we read the pte value with READ_ONCE(), the compiler cannot elide
the redundant read for !CONFIG_DEBUG_VM kernels.

Let's ameliorate matters by moving the read and the checks into a
helper, __check_racy_pte_update(), which only performs the read when the
value will be used. This also allows us to reformat the conditions for
clarity.

Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/include/asm/pgtable.h