arm64: mm: Make PUD folding check in set_pud() a runtime check
PATCH 1/1 arm64: mm: Make PUD folding check in set_pud() a runtime check
From: Ard Biesheuvel <[email protected]>
When set_pud() is called on a 4-level paging build config that runs with 3 levels at runtime (which happens with 16k page size builds with support for LPA2), the updated entry is in fact a PGD in swapper_pg_dir[], and this is mapped read-only after boot.
So in this case, the existing check needs to be performed as well, even though __PAGETABLE_PUD_FOLDED is not #define'd. So replace the #ifdef with a call to pgtable_l4_enabled().
--- arch/arm64/include/asm/pgtable.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
arch/arm64/include/asm/pgtable.h +3 -3
@@ -699,14 +699,14 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd)#define pud_user (pud) pte_user(pud_pte(pud))#define pud_user_exec (pud) pte_user_exec(pud_pte(pud)) +static inline bool pgtable_l4_enabled (void ); +static inline void set_pud (pud_t *pudp,pud_t pud) { -#ifdef __PAGETABLE_PUD_FOLDED -if (in_swapper_pgdir (pudp)) { +if (!pgtable_l4_enabled () &&in_swapper_pgdir (pudp)) {set_swapper_pgd ((pgd_t *)pudp,__pgd (pud_val (pud)));return ; } -#endif /* __PAGETABLE_PUD_FOLDED */ WRITE_ONCE (*pudp, pud);
Signature · 7 lines
2.44.0.rc0.258.g7320e95886-goog _______________________________________________ linux-arm-kernel mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Quoted 10 lines · Ard Biesheuvel
When
set_pud()is called on a 4-level paging build config that runs with 3 levels at runtime (which happens with 16k page size builds with support for LPA2), the updated entry is in fact a PGD in swapper_pg_dir[], and this is mapped read-only after boot.So in this case, the existing check needs to be performed as well, even though
__PAGETABLE_PUD_FOLDEDis not #define'd. So replace the #ifdef with a call topgtable_l4_enabled().[...]
Applied to arm64 (for-next/stage1-lpa2), thanks!
[1/1] arm64: mm: Make PUD folding check in set_pud() a runtime check
https://git.kernel.org/arm64/c/90e636f60b76
Signature · 7 lines
Catalin _______________________________________________ linux-arm-kernel mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-arm-kernel