From: "David Hildenbrand (Arm)" <[email protected]> The stubs are documented to "doesn't get actually called", which was false for a couple of instances.
The helpers are dangerous, especially with some upcoming changes. We made all code compile-out any calls to set_pgd/set_p4d/set_pud for folded page tables. So let's make the compiler complain if these helpers are abused in wrong context. Signed-off-by: David Hildenbrand (Arm) <[email protected]> Signed-off-by: Yeoreum Yun <[email protected]> --- include/asm-generic/pgtable-nop4d.h | 7 ++----- include/asm-generic/pgtable-nopmd.h | 6 +----- include/asm-generic/pgtable-nopud.h | 7 ++----- 3 files changed, 5 insertions(+), 15 deletions(-) diff --git a/include/asm-generic/pgtable-nop4d.h b/include/asm-generic/pgtable-nop4d.h index 019c3f074b771..0f3b56deaa165 100644 --- a/include/asm-generic/pgtable-nop4d.h +++ b/include/asm-generic/pgtable-nop4d.h @@ -28,11 +28,8 @@ static inline bool pgd_leaf(pgd_t pgd) { return false; } #define pgd_populate(mm, pgd, p4d) do { } while (0) #define pgd_populate_safe(mm, pgd, p4d) do { } while (0) -/* - * (p4ds are folded into pgds so this doesn't get actually called, - * but the define is needed for a generic inline function.) - */ -#define set_pgd(pgdptr, pgdval) set_p4d((p4d_t *)(pgdptr), (p4d_t) { pgdval }) + +#define set_pgd(pgdptr, pgdval) BUILD_BUG() static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address) { diff --git a/include/asm-generic/pgtable-nopmd.h b/include/asm-generic/pgtable-nopmd.h index ae2eff44889ac..9d854211a55a5 100644 --- a/include/asm-generic/pgtable-nopmd.h +++ b/include/asm-generic/pgtable-nopmd.h @@ -38,11 +38,7 @@ static inline void pud_clear(pud_t *pud) { } #define pud_populate(mm, pmd, pte) do { } while (0) -/* - * (pmds are folded into puds so this doesn't get actually called, - * but the define is needed for a generic inline function.) - */ -#define set_pud(pudptr, pudval) set_pmd((pmd_t *)(pudptr), (pmd_t) { pudval }) +#define set_pud(pudptr, pudval) BUILD_BUG() static inline pmd_t * pmd_offset(pud_t * pud, unsigned long address) { diff --git a/include/asm-generic/pgtable-nopud.h b/include/asm-generic/pgtable-nopud.h index 5a2b0a81ae197..aa8a6ce139e47 100644 --- a/include/asm-generic/pgtable-nopud.h +++ b/include/asm-generic/pgtable-nopud.h @@ -35,11 +35,8 @@ static inline bool p4d_leaf(p4d_t p4d) { return false; } #define p4d_populate(mm, p4d, pud) do { } while (0) #define p4d_populate_safe(mm, p4d, pud) do { } while (0) -/* - * (puds are folded into p4ds so this doesn't get actually called, - * but the define is needed for a generic inline function.) - */ -#define set_p4d(p4dptr, p4dval) set_pud((pud_t *)(p4dptr), (pud_t) { p4dval }) + +#define set_p4d(p4dptr, p4dval) BUILD_BUG() static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address) { -- LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7}
