arm64: mm: don't assume struct page is always 64 bytes
authorArd Biesheuvel <ardb@kernel.org>
Tue, 10 Nov 2020 18:05:11 +0000 (19:05 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Thu, 12 Nov 2020 08:32:25 +0000 (08:32 +0000)
commitc1090bb10d5e15906d296936e64317e35c43f21d
treecaf928e4d9bd18669e753444458088a7f6654bb9
parent68af6d2483dbd0385317bc87a338b155be75eeb6
arm64: mm: don't assume struct page is always 64 bytes

Commit 8c96400d6a39be7 simplified the page-to-virt and virt-to-page
conversions, based on the assumption that struct page is always 64
bytes in size, in which case we can use a single signed shift to
perform the conversion (provided that the vmemmap array is placed
appropriately in the kernel VA space)

Unfortunately, this assumption turns out not to hold, and so we need
to revert part of this commit, and go back to an affine transformation.
Given that all the quantities involved are compile time constants,
this should not make any practical difference.

Fixes: 8c96400d6a39 ("arm64: mm: make vmemmap region a projection of the linear region")
Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Link: https://lore.kernel.org/r/20201110180511.29083-1-ardb@kernel.org
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/include/asm/memory.h
arch/arm64/mm/init.c