Re: [PATCH 05/10] riscv: mm: Skip pgtable level check in {pud,p4d}_alloc_one

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



+Qi

On 03/01/2025 11:31, Alexandre Ghiti wrote:
Hi Kevin,

On 19/12/2024 17:44, Kevin Brodsky wrote:
{pmd,pud,p4d}_alloc_one() is never called if the corresponding page
table level is folded, as {pmd,pud,p4d}_alloc() already does the
required check. We can therefore remove the runtime page table level
checks in {pud,p4d}_alloc_one. The PUD helper becomes equivalent to
the generic version, so we remove it altogether.

This is consistent with the way arm64 and x86 handle this situation
(runtime check in p4d_free() only).

Signed-off-by: Kevin Brodsky <kevin.brodsky@xxxxxxx>
---
  arch/riscv/include/asm/pgalloc.h | 22 ++++------------------
  1 file changed, 4 insertions(+), 18 deletions(-)

diff --git a/arch/riscv/include/asm/pgalloc.h
b/arch/riscv/include/asm/pgalloc.h
index f52264304f77..8ad0bbe838a2 100644
--- a/arch/riscv/include/asm/pgalloc.h
+++ b/arch/riscv/include/asm/pgalloc.h
@@ -12,7 +12,6 @@
  #include <asm/tlb.h>
    #ifdef CONFIG_MMU
-#define __HAVE_ARCH_PUD_ALLOC_ONE
  #define __HAVE_ARCH_PUD_FREE
  #include <asm-generic/pgalloc.h>
  @@ -88,15 +87,6 @@ static inline void pgd_populate_safe(struct
mm_struct *mm, pgd_t *pgd,
      }
  }
  -#define pud_alloc_one pud_alloc_one
-static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned
long addr)
-{
-    if (pgtable_l4_enabled)
-        return __pud_alloc_one(mm, addr);
-
-    return NULL;
-}
-
  #define pud_free pud_free
  static inline void pud_free(struct mm_struct *mm, pud_t *pud)
  {
@@ -118,15 +108,11 @@ static inline void __pud_free_tlb(struct
mmu_gather *tlb, pud_t *pud,
  #define p4d_alloc_one p4d_alloc_one
  static inline p4d_t *p4d_alloc_one(struct mm_struct *mm, unsigned
long addr)
  {
-    if (pgtable_l5_enabled) {
-        gfp_t gfp = GFP_PGTABLE_USER;
-
-        if (mm == &init_mm)
-            gfp = GFP_PGTABLE_KERNEL;
-        return (p4d_t *)get_zeroed_page(gfp);
-    }
+    gfp_t gfp = GFP_PGTABLE_USER;
  -    return NULL;
+    if (mm == &init_mm)
+        gfp = GFP_PGTABLE_KERNEL;
+    return (p4d_t *)get_zeroed_page(gfp);
  }
    static inline void __p4d_free(struct mm_struct *mm, p4d_t *p4d)


Reviewed-by: Alexandre Ghiti <alexghiti@xxxxxxxxxxxx>

Thanks for the review! Just FYI this patch is now part of Qi's series
[1], I will drop it when posting the next version of this series.

- Kevin

[1]
https://lore.kernel.org/linux-mm/84ddf857508b98a195a790bc6ff6ab8849b44633.1735549103.git.zhengqi.arch@xxxxxxxxxxxxx/




[Index of Archives]     [Video for Linux]     [Yosemite News]     [Linux S/390]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux