linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 1/5] arch/x86: Drop own definition of pgd,p4d_leaf
@ 2024-07-13  7:08 Christophe Leroy
  2024-07-13  7:08 ` [PATCH v3 2/5] mm: Remove pud_user() from asm-generic/pgtable-nopmd.h Christophe Leroy
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Christophe Leroy @ 2024-07-13  7:08 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Christophe Leroy, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
	Dave Hansen, x86, H. Peter Anvin, Catalin Marinas, Will Deacon,
	Paul Walmsley, Palmer Dabbelt, Albert Ou, Arnd Bergmann,
	Huacai Chen, WANG Xuerui, Thomas Bogendoerfer, linux-kernel,
	linux-mm, linux-arm-kernel, linux-riscv, linux-arch, loongarch,
	linux-mips, Oscar Salvador, Peter Xu

From: Oscar Salvador <osalvador@suse.de>

We provide generic definitions of pXd_leaf in pgtable.h when the arch
do not define their own, where the generic pXd_leaf always return false.

Although x86 defines {pgd,p4d}_leaf, they end up being a no-op, so drop them
and make them fallback to the generic one.

Signed-off-by: Oscar Salvador <osalvador@suse.de>
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Reviewed-by: Peter Xu <peterx@redhat.com>
---
 arch/x86/include/asm/pgtable.h | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
index 65b8e5bb902c..772f778bac06 100644
--- a/arch/x86/include/asm/pgtable.h
+++ b/arch/x86/include/asm/pgtable.h
@@ -252,13 +252,6 @@ static inline unsigned long pgd_pfn(pgd_t pgd)
 	return (pgd_val(pgd) & PTE_PFN_MASK) >> PAGE_SHIFT;
 }
 
-#define p4d_leaf p4d_leaf
-static inline bool p4d_leaf(p4d_t p4d)
-{
-	/* No 512 GiB pages yet */
-	return 0;
-}
-
 #define pte_page(pte)	pfn_to_page(pte_pfn(pte))
 
 #define pmd_leaf pmd_leaf
@@ -1396,9 +1389,6 @@ static inline bool pgdp_maps_userspace(void *__ptr)
 	return (((ptr & ~PAGE_MASK) / sizeof(pgd_t)) < PGD_KERNEL_START);
 }
 
-#define pgd_leaf	pgd_leaf
-static inline bool pgd_leaf(pgd_t pgd) { return false; }
-
 #ifdef CONFIG_MITIGATION_PAGE_TABLE_ISOLATION
 /*
  * All top-level MITIGATION_PAGE_TABLE_ISOLATION page tables are order-1 pages
-- 
2.44.0



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v3 2/5] mm: Remove pud_user() from asm-generic/pgtable-nopmd.h
  2024-07-13  7:08 [PATCH v3 1/5] arch/x86: Drop own definition of pgd,p4d_leaf Christophe Leroy
@ 2024-07-13  7:08 ` Christophe Leroy
  2024-07-13  7:08 ` [PATCH v3 3/5] LoongArch: Do not define pud_leaf() when there is no PMD Christophe Leroy
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Christophe Leroy @ 2024-07-13  7:08 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Christophe Leroy, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
	Dave Hansen, x86, H. Peter Anvin, Catalin Marinas, Will Deacon,
	Paul Walmsley, Palmer Dabbelt, Albert Ou, Arnd Bergmann,
	Huacai Chen, WANG Xuerui, Thomas Bogendoerfer, linux-kernel,
	linux-mm, linux-arm-kernel, linux-riscv, linux-arch, loongarch,
	linux-mips, Peter Xu, Oscar Salvador

Commit 2c8a81dc0cc5 ("riscv/mm: fix two page table check related
issues") added pud_user() in include/asm-generic/pgtable-nopmd.h

But pud_user() only exists on ARM64 and RISCV and is not expected
by any part of MM.

Add the missing definition in arch/riscv/include/asm/pgtable-32.h
and remove it from asm-generic/pgtable-nopmd.h

A stub pud_user() is also required for ARM64 after
commit ed928a3402d8 ("arm64/mm: fix page table check compile
error for CONFIG_PGTABLE_LEVELS=2")

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Oscar Salvador <osalvador@suse.de>
---
v3: Added pud_user() for arm64
---
 arch/arm64/include/asm/pgtable.h    | 1 +
 arch/riscv/include/asm/pgtable-32.h | 5 +++++
 include/asm-generic/pgtable-nopmd.h | 1 -
 3 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
index f8efbc128446..c818b3328704 100644
--- a/arch/arm64/include/asm/pgtable.h
+++ b/arch/arm64/include/asm/pgtable.h
@@ -812,6 +812,7 @@ static inline pmd_t *pud_pgtable(pud_t pud)
 
 #define pud_valid(pud)		false
 #define pud_page_paddr(pud)	({ BUILD_BUG(); 0; })
+#define pud_user		false /* Always 0 with folding */
 #define pud_user_exec(pud)	pud_user(pud) /* Always 0 with folding */
 
 /* Match pmd_offset folding in <asm/generic/pgtable-nopmd.h> */
diff --git a/arch/riscv/include/asm/pgtable-32.h b/arch/riscv/include/asm/pgtable-32.h
index 00f3369570a8..37878ef37466 100644
--- a/arch/riscv/include/asm/pgtable-32.h
+++ b/arch/riscv/include/asm/pgtable-32.h
@@ -36,4 +36,9 @@
 static const __maybe_unused int pgtable_l4_enabled;
 static const __maybe_unused int pgtable_l5_enabled;
 
+static inline int pud_user(pud_t pud)
+{
+	return 0;
+}
+
 #endif /* _ASM_RISCV_PGTABLE_32_H */
diff --git a/include/asm-generic/pgtable-nopmd.h b/include/asm-generic/pgtable-nopmd.h
index 8ffd64e7a24c..b01349a312fa 100644
--- a/include/asm-generic/pgtable-nopmd.h
+++ b/include/asm-generic/pgtable-nopmd.h
@@ -30,7 +30,6 @@ typedef struct { pud_t pud; } pmd_t;
 static inline int pud_none(pud_t pud)		{ return 0; }
 static inline int pud_bad(pud_t pud)		{ return 0; }
 static inline int pud_present(pud_t pud)	{ return 1; }
-static inline int pud_user(pud_t pud)		{ return 0; }
 static inline int pud_leaf(pud_t pud)		{ return 0; }
 static inline void pud_clear(pud_t *pud)	{ }
 #define pmd_ERROR(pmd)				(pud_ERROR((pmd).pud))
-- 
2.44.0



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v3 3/5] LoongArch: Do not define pud_leaf() when there is no PMD
  2024-07-13  7:08 [PATCH v3 1/5] arch/x86: Drop own definition of pgd,p4d_leaf Christophe Leroy
  2024-07-13  7:08 ` [PATCH v3 2/5] mm: Remove pud_user() from asm-generic/pgtable-nopmd.h Christophe Leroy
@ 2024-07-13  7:08 ` Christophe Leroy
  2024-07-13  7:08 ` [PATCH v3 4/5] mips: " Christophe Leroy
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Christophe Leroy @ 2024-07-13  7:08 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Christophe Leroy, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
	Dave Hansen, x86, H. Peter Anvin, Catalin Marinas, Will Deacon,
	Paul Walmsley, Palmer Dabbelt, Albert Ou, Arnd Bergmann,
	Huacai Chen, WANG Xuerui, Thomas Bogendoerfer, linux-kernel,
	linux-mm, linux-arm-kernel, linux-riscv, linux-arch, loongarch,
	linux-mips

pud_leaf() is already provided by asm-generic/pgtable-nopmd.h

Do not add a macro that hides and overrides the static inline
definition in asm-generic/pgtable-nopmd.h.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
---
 arch/loongarch/include/asm/pgtable.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/loongarch/include/asm/pgtable.h b/arch/loongarch/include/asm/pgtable.h
index 161dd6e10479..da91b2d8bc6f 100644
--- a/arch/loongarch/include/asm/pgtable.h
+++ b/arch/loongarch/include/asm/pgtable.h
@@ -207,6 +207,7 @@ static inline pmd_t *pud_pgtable(pud_t pud)
 
 #define pud_phys(pud)		PHYSADDR(pud_val(pud))
 #define pud_page(pud)		(pfn_to_page(pud_phys(pud) >> PAGE_SHIFT))
+#define pud_leaf(pud)		((pud_val(pud) & _PAGE_HUGE) != 0)
 
 #endif
 
@@ -611,7 +612,6 @@ static inline long pmd_protnone(pmd_t pmd)
 #endif /* CONFIG_NUMA_BALANCING */
 
 #define pmd_leaf(pmd)		((pmd_val(pmd) & _PAGE_HUGE) != 0)
-#define pud_leaf(pud)		((pud_val(pud) & _PAGE_HUGE) != 0)
 
 /*
  * We provide our own get_unmapped area to cope with the virtual aliasing
-- 
2.44.0



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v3 4/5] mips: Do not define pud_leaf() when there is no PMD
  2024-07-13  7:08 [PATCH v3 1/5] arch/x86: Drop own definition of pgd,p4d_leaf Christophe Leroy
  2024-07-13  7:08 ` [PATCH v3 2/5] mm: Remove pud_user() from asm-generic/pgtable-nopmd.h Christophe Leroy
  2024-07-13  7:08 ` [PATCH v3 3/5] LoongArch: Do not define pud_leaf() when there is no PMD Christophe Leroy
@ 2024-07-13  7:08 ` Christophe Leroy
  2024-07-13  7:08 ` [PATCH v3 5/5] mm: Add p{g/4}d_leaf() in asm-generic/pgtable-nop{4/u}d.h Christophe Leroy
  2025-03-17 23:52 ` [PATCH v3 1/5] arch/x86: Drop own definition of pgd,p4d_leaf Baoquan He
  4 siblings, 0 replies; 6+ messages in thread
From: Christophe Leroy @ 2024-07-13  7:08 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Christophe Leroy, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
	Dave Hansen, x86, H. Peter Anvin, Catalin Marinas, Will Deacon,
	Paul Walmsley, Palmer Dabbelt, Albert Ou, Arnd Bergmann,
	Huacai Chen, WANG Xuerui, Thomas Bogendoerfer, linux-kernel,
	linux-mm, linux-arm-kernel, linux-riscv, linux-arch, loongarch,
	linux-mips

pud_leaf() is already provided by asm-generic/pgtable-nopmd.h

Do not add a macro that hides and overrides the static inline
definition in asm-generic/pgtable-nopmd.h.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
---
 arch/mips/include/asm/pgtable-64.h | 4 ++++
 arch/mips/include/asm/pgtable.h    | 1 -
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/arch/mips/include/asm/pgtable-64.h b/arch/mips/include/asm/pgtable-64.h
index 401c1d9e4409..d2de4e2800be 100644
--- a/arch/mips/include/asm/pgtable-64.h
+++ b/arch/mips/include/asm/pgtable-64.h
@@ -294,6 +294,10 @@ static inline void pud_clear(pud_t *pudp)
 {
 	pud_val(*pudp) = ((unsigned long) invalid_pmd_table);
 }
+
+#ifdef _PAGE_HUGE
+#define pud_leaf(pud)	((pud_val(pud) & _PAGE_HUGE) != 0)
+#endif
 #endif
 
 #define pte_page(x)		pfn_to_page(pte_pfn(x))
diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h
index c29a551eb0ca..28233025f884 100644
--- a/arch/mips/include/asm/pgtable.h
+++ b/arch/mips/include/asm/pgtable.h
@@ -755,7 +755,6 @@ static inline pmd_t pmdp_huge_get_and_clear(struct mm_struct *mm,
 
 #ifdef _PAGE_HUGE
 #define pmd_leaf(pmd)	((pmd_val(pmd) & _PAGE_HUGE) != 0)
-#define pud_leaf(pud)	((pud_val(pud) & _PAGE_HUGE) != 0)
 #endif
 
 #define gup_fast_permitted(start, end)	(!cpu_has_dc_aliases)
-- 
2.44.0



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v3 5/5] mm: Add p{g/4}d_leaf() in asm-generic/pgtable-nop{4/u}d.h
  2024-07-13  7:08 [PATCH v3 1/5] arch/x86: Drop own definition of pgd,p4d_leaf Christophe Leroy
                   ` (2 preceding siblings ...)
  2024-07-13  7:08 ` [PATCH v3 4/5] mips: " Christophe Leroy
@ 2024-07-13  7:08 ` Christophe Leroy
  2025-03-17 23:52 ` [PATCH v3 1/5] arch/x86: Drop own definition of pgd,p4d_leaf Baoquan He
  4 siblings, 0 replies; 6+ messages in thread
From: Christophe Leroy @ 2024-07-13  7:08 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Christophe Leroy, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
	Dave Hansen, x86, H. Peter Anvin, Catalin Marinas, Will Deacon,
	Paul Walmsley, Palmer Dabbelt, Albert Ou, Arnd Bergmann,
	Huacai Chen, WANG Xuerui, Thomas Bogendoerfer, linux-kernel,
	linux-mm, linux-arm-kernel, linux-riscv, linux-arch, loongarch,
	linux-mips, Peter Xu

Commit 2c8a81dc0cc5 ("riscv/mm: fix two page table check related
issues") added pud_leaf() in include/asm-generic/pgtable-nopmd.h

Do the same for p4d_leaf() and pgd_leaf() to avoid getting them
erroneously defined by architectures that do not implement the
related page level.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Reviewed-by: Peter Xu <peterx@redhat.com>
---
v2: Added pXd_leaf macro as well in asm-generic/pgtable-nopXd.h to cohabit with the fallback
---
 include/asm-generic/pgtable-nop4d.h | 2 ++
 include/asm-generic/pgtable-nopmd.h | 1 +
 include/asm-generic/pgtable-nopud.h | 2 ++
 3 files changed, 5 insertions(+)

diff --git a/include/asm-generic/pgtable-nop4d.h b/include/asm-generic/pgtable-nop4d.h
index 03b7dae47dd4..ed7ba008469f 100644
--- a/include/asm-generic/pgtable-nop4d.h
+++ b/include/asm-generic/pgtable-nop4d.h
@@ -21,6 +21,8 @@ typedef struct { pgd_t pgd; } p4d_t;
 static inline int pgd_none(pgd_t pgd)		{ return 0; }
 static inline int pgd_bad(pgd_t pgd)		{ return 0; }
 static inline int pgd_present(pgd_t pgd)	{ return 1; }
+static inline int pgd_leaf(pgd_t pgd)		{ return 0; }
+#define pgd_leaf pgd_leaf
 static inline void pgd_clear(pgd_t *pgd)	{ }
 #define p4d_ERROR(p4d)				(pgd_ERROR((p4d).pgd))
 
diff --git a/include/asm-generic/pgtable-nopmd.h b/include/asm-generic/pgtable-nopmd.h
index b01349a312fa..e178ace2e23e 100644
--- a/include/asm-generic/pgtable-nopmd.h
+++ b/include/asm-generic/pgtable-nopmd.h
@@ -31,6 +31,7 @@ static inline int pud_none(pud_t pud)		{ return 0; }
 static inline int pud_bad(pud_t pud)		{ return 0; }
 static inline int pud_present(pud_t pud)	{ return 1; }
 static inline int pud_leaf(pud_t pud)		{ return 0; }
+#define pud_leaf pud_leaf
 static inline void pud_clear(pud_t *pud)	{ }
 #define pmd_ERROR(pmd)				(pud_ERROR((pmd).pud))
 
diff --git a/include/asm-generic/pgtable-nopud.h b/include/asm-generic/pgtable-nopud.h
index eb70c6d7ceff..655dfebea91c 100644
--- a/include/asm-generic/pgtable-nopud.h
+++ b/include/asm-generic/pgtable-nopud.h
@@ -28,6 +28,8 @@ typedef struct { p4d_t p4d; } pud_t;
 static inline int p4d_none(p4d_t p4d)		{ return 0; }
 static inline int p4d_bad(p4d_t p4d)		{ return 0; }
 static inline int p4d_present(p4d_t p4d)	{ return 1; }
+static inline int p4d_leaf(p4d_t p4d)		{ return 0; }
+#define p4d_leaf p4d_leaf
 static inline void p4d_clear(p4d_t *p4d)	{ }
 #define pud_ERROR(pud)				(p4d_ERROR((pud).p4d))
 
-- 
2.44.0



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3 1/5] arch/x86: Drop own definition of pgd,p4d_leaf
  2024-07-13  7:08 [PATCH v3 1/5] arch/x86: Drop own definition of pgd,p4d_leaf Christophe Leroy
                   ` (3 preceding siblings ...)
  2024-07-13  7:08 ` [PATCH v3 5/5] mm: Add p{g/4}d_leaf() in asm-generic/pgtable-nop{4/u}d.h Christophe Leroy
@ 2025-03-17 23:52 ` Baoquan He
  4 siblings, 0 replies; 6+ messages in thread
From: Baoquan He @ 2025-03-17 23:52 UTC (permalink / raw)
  To: Christophe Leroy, Andrew Morton
  Cc: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
	H. Peter Anvin, Catalin Marinas, Will Deacon, Paul Walmsley,
	Palmer Dabbelt, Albert Ou, Arnd Bergmann, Huacai Chen,
	WANG Xuerui, Thomas Bogendoerfer, linux-kernel, linux-mm,
	linux-arm-kernel, linux-riscv, linux-arch, loongarch, linux-mips,
	Oscar Salvador, Peter Xu

On 07/13/24 at 09:08am, Christophe Leroy wrote:
> From: Oscar Salvador <osalvador@suse.de>
> 
> We provide generic definitions of pXd_leaf in pgtable.h when the arch
> do not define their own, where the generic pXd_leaf always return false.
> 
> Although x86 defines {pgd,p4d}_leaf, they end up being a no-op, so drop them
> and make them fallback to the generic one.
> 
> Signed-off-by: Oscar Salvador <osalvador@suse.de>
> Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
> Reviewed-by: Peter Xu <peterx@redhat.com>
> ---
>  arch/x86/include/asm/pgtable.h | 10 ----------
>  1 file changed, 10 deletions(-)

Seems this series is missed. It does do a great clean up.

> 
> diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
> index 65b8e5bb902c..772f778bac06 100644
> --- a/arch/x86/include/asm/pgtable.h
> +++ b/arch/x86/include/asm/pgtable.h
> @@ -252,13 +252,6 @@ static inline unsigned long pgd_pfn(pgd_t pgd)
>  	return (pgd_val(pgd) & PTE_PFN_MASK) >> PAGE_SHIFT;
>  }
>  
> -#define p4d_leaf p4d_leaf
> -static inline bool p4d_leaf(p4d_t p4d)
> -{
> -	/* No 512 GiB pages yet */
> -	return 0;
> -}
> -
>  #define pte_page(pte)	pfn_to_page(pte_pfn(pte))
>  
>  #define pmd_leaf pmd_leaf
> @@ -1396,9 +1389,6 @@ static inline bool pgdp_maps_userspace(void *__ptr)
>  	return (((ptr & ~PAGE_MASK) / sizeof(pgd_t)) < PGD_KERNEL_START);
>  }
>  
> -#define pgd_leaf	pgd_leaf
> -static inline bool pgd_leaf(pgd_t pgd) { return false; }
> -
>  #ifdef CONFIG_MITIGATION_PAGE_TABLE_ISOLATION
>  /*
>   * All top-level MITIGATION_PAGE_TABLE_ISOLATION page tables are order-1 pages
> -- 
> 2.44.0
> 
> 



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-03-17 23:52 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-07-13  7:08 [PATCH v3 1/5] arch/x86: Drop own definition of pgd,p4d_leaf Christophe Leroy
2024-07-13  7:08 ` [PATCH v3 2/5] mm: Remove pud_user() from asm-generic/pgtable-nopmd.h Christophe Leroy
2024-07-13  7:08 ` [PATCH v3 3/5] LoongArch: Do not define pud_leaf() when there is no PMD Christophe Leroy
2024-07-13  7:08 ` [PATCH v3 4/5] mips: " Christophe Leroy
2024-07-13  7:08 ` [PATCH v3 5/5] mm: Add p{g/4}d_leaf() in asm-generic/pgtable-nop{4/u}d.h Christophe Leroy
2025-03-17 23:52 ` [PATCH v3 1/5] arch/x86: Drop own definition of pgd,p4d_leaf Baoquan He

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox