On Thu, Feb 28, 2019 at 10:07:52AM -0500, Sasha Levin wrote:
From: Will Deacon will.deacon@arm.com
[ Upstream commit d23c808c6fc6132e812690648e14c0d6b0cbe273 ]
When 52-bit virtual addressing is enabled for userspace (CONFIG_ARM64_USER_VA_BITS_52=y), the kernel continues to utilise 48-bit virtual addressing in TTBR1. Consequently, PTRS_PER_PGD reflects the larger page table size for userspace and the pgd pointer for kernel page tables is offset before being written to TTBR1.
This means that we can't use PTRS_PER_PGD to iterate over kernel page tables unless we apply the same offset, which is fiddly to get right and leads to some non-idiomatic walking code. Instead, just follow the usual pattern when walking page tables by using a while loop driven by pXd_offset() and pXd_addr_end().
Reported-by: Qian Cai cai@lca.pw Tested-by: Qian Cai cai@lca.pw Acked-by: Steve Capper steve.capper@arm.com Tested-by: Steve Capper steve.capper@arm.com Signed-off-by: Will Deacon will.deacon@arm.com Signed-off-by: Sasha Levin sashal@kernel.org
arch/arm64/mm/dump.c | 59 ++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 30 deletions(-)
4.20 doesn't support 52-bit VAs, so this isn't needed there afaict (and is why I didn't tag the commit for stable in the first place).
Will