Re: [PATCH 3/7] loongarch: mm: enable MMU_GATHER_RCU_TABLE_FREE
From: Qi Zheng
Date: Fri Nov 14 2025 - 10:56:27 EST
Hi Huacai,
On 11/14/25 10:17 PM, Huacai Chen wrote:
Hi, Qi Zheng,
We usually use LoongArch rather than loongarch, but if you want to
keep consistency for all patches, just do it.
OK, will change to use LoongArch.
On Fri, Nov 14, 2025 at 7:13 PM Qi Zheng <qi.zheng@xxxxxxxxx> wrote:
Please use alpha-betical order.
From: Qi Zheng <zhengqi.arch@xxxxxxxxxxxxx>
On a 64-bit system, madvise(MADV_DONTNEED) may cause a large number of
empty PTE page table pages (such as 100GB+). To resolve this problem,
first enable MMU_GATHER_RCU_TABLE_FREE to prepare for enabling the
PT_RECLAIM feature, which resolves this problem.
Signed-off-by: Qi Zheng <zhengqi.arch@xxxxxxxxxxxxx>
Cc: Huacai Chen <chenhuacai@xxxxxxxxxx>
Cc: WANG Xuerui <kernel@xxxxxxxxxx>
---
arch/loongarch/Kconfig | 1 +
arch/loongarch/include/asm/pgalloc.h | 6 ++++--
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig
index 5b1116733d881..3bf2f2a9cd647 100644
--- a/arch/loongarch/Kconfig
+++ b/arch/loongarch/Kconfig
@@ -210,6 +210,7 @@ config LOONGARCH
select USER_STACKTRACE_SUPPORT
select VDSO_GETRANDOM
select ZONE_DMA32
+ select MMU_GATHER_RCU_TABLE_FREE
OK, will do.
I think we can define it in one line.
config 32BIT
bool
diff --git a/arch/loongarch/include/asm/pgalloc.h b/arch/loongarch/include/asm/pgalloc.h
index 1c63a9d9a6d35..0539d04bf1525 100644
--- a/arch/loongarch/include/asm/pgalloc.h
+++ b/arch/loongarch/include/asm/pgalloc.h
@@ -79,7 +79,8 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
return pmd;
}
-#define __pmd_free_tlb(tlb, x, addr) pmd_free((tlb)->mm, x)
+#define __pmd_free_tlb(tlb, x, addr) \
+ tlb_remove_ptdesc((tlb), virt_to_ptdesc(x))
will do.
The same.
#endif
@@ -99,7 +100,8 @@ static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long address)
return pud;
}
-#define __pud_free_tlb(tlb, x, addr) pud_free((tlb)->mm, x)
+#define __pud_free_tlb(tlb, x, addr) \
+ tlb_remove_ptdesc((tlb), virt_to_ptdesc(x))
Other patches have the same problem.
Got it, will convert them all to the one-line type.
Thanks,
Qi
Huacai
#endif /* __PAGETABLE_PUD_FOLDED */
--
2.20.1