]> git.baikalelectronics.ru Git - kernel.git/commit
arm64: pgtable: Fix pte_accessible()
authorWill Deacon <will@kernel.org>
Fri, 20 Nov 2020 13:28:01 +0000 (13:28 +0000)
committerWill Deacon <will@kernel.org>
Mon, 23 Nov 2020 16:13:12 +0000 (16:13 +0000)
commit9c3f23ca7442b63d1640869bff75327de0b5f9c0
tree4abdc056daca6993830cd60c25354d386bb3039f
parentb24d492b457ca831d4be7825399db3a4555fd356
arm64: pgtable: Fix pte_accessible()

pte_accessible() is used by ptep_clear_flush() to figure out whether TLB
invalidation is necessary when unmapping pages for reclaim. Although our
implementation is correct according to the architecture, returning true
only for valid, young ptes in the absence of racing page-table
modifications, this is in fact flawed due to lazy invalidation of old
ptes in ptep_clear_flush_young() where we elide the expensive DSB
instruction for completing the TLB invalidation.

Rather than penalise the aging path, adjust pte_accessible() to return
true for any valid pte, even if the access flag is cleared.

Cc: <stable@vger.kernel.org>
Fixes: 2459329ac4cc ("arm64: pgtable: implement pte_accessible()")
Reported-by: Yu Zhao <yuzhao@google.com>
Acked-by: Yu Zhao <yuzhao@google.com>
Reviewed-by: Minchan Kim <minchan@kernel.org>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Link: https://lore.kernel.org/r/20201120143557.6715-2-will@kernel.org
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/include/asm/pgtable.h