* [PATCH v3 1/7] mm: change mm/pt_reclaim.c to use asm/tlb.h instead of asm-generic/tlb.h
2025-12-17 9:45 [PATCH v3 0/7] enable PT_RECLAIM on all 64-bit architectures Qi Zheng
@ 2025-12-17 9:45 ` Qi Zheng
2025-12-17 9:45 ` [PATCH v3 2/7] alpha: mm: enable MMU_GATHER_RCU_TABLE_FREE Qi Zheng
` (5 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Qi Zheng @ 2025-12-17 9:45 UTC (permalink / raw)
To: will, aneesh.kumar, npiggin, peterz, dev.jain, akpm, david,
ioworker0, linmag7
Cc: linux-arch, linux-kernel, linux-mm, linux-alpha, loongarch,
linux-mips, linux-parisc, linux-um, Qi Zheng
From: Qi Zheng <zhengqi.arch@bytedance.com>
Generally, the asm/tlb.h will include asm-generic/tlb.h, so change
mm/pt_reclaim.c to use asm/tlb.h instead of asm-generic/tlb.h. This is a
preparation for enabling CONFIG_PT_RECLAIM on other architectures, such as
alpha.
Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
Acked-by: David Hildenbrand (Red Hat) <david@kernel.org>
---
mm/pt_reclaim.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mm/pt_reclaim.c b/mm/pt_reclaim.c
index 0d9cfbf4fe5d8..46771cfff8239 100644
--- a/mm/pt_reclaim.c
+++ b/mm/pt_reclaim.c
@@ -2,7 +2,7 @@
#include <linux/hugetlb.h>
#include <linux/pgalloc.h>
-#include <asm-generic/tlb.h>
+#include <asm/tlb.h>
#include "internal.h"
--
2.20.1
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH v3 2/7] alpha: mm: enable MMU_GATHER_RCU_TABLE_FREE
2025-12-17 9:45 [PATCH v3 0/7] enable PT_RECLAIM on all 64-bit architectures Qi Zheng
2025-12-17 9:45 ` [PATCH v3 1/7] mm: change mm/pt_reclaim.c to use asm/tlb.h instead of asm-generic/tlb.h Qi Zheng
@ 2025-12-17 9:45 ` Qi Zheng
2025-12-17 9:45 ` [PATCH v3 3/7] LoongArch: " Qi Zheng
` (4 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Qi Zheng @ 2025-12-17 9:45 UTC (permalink / raw)
To: will, aneesh.kumar, npiggin, peterz, dev.jain, akpm, david,
ioworker0, linmag7
Cc: linux-arch, linux-kernel, linux-mm, linux-alpha, loongarch,
linux-mips, linux-parisc, linux-um, Qi Zheng, Richard Henderson,
Matt Turner
From: Qi Zheng <zhengqi.arch@bytedance.com>
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@bytedance.com>
Cc: Richard Henderson <richard.henderson@linaro.org>
Cc: Matt Turner <mattst88@gmail.com>
---
arch/alpha/Kconfig | 1 +
arch/alpha/include/asm/tlb.h | 6 +++---
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig
index 80367f2cf821c..6c7dbf0adad62 100644
--- a/arch/alpha/Kconfig
+++ b/arch/alpha/Kconfig
@@ -38,6 +38,7 @@ config ALPHA
select OLD_SIGSUSPEND
select CPU_NO_EFFICIENT_FFS if !ALPHA_EV67
select MMU_GATHER_NO_RANGE
+ select MMU_GATHER_RCU_TABLE_FREE
select SPARSEMEM_EXTREME if SPARSEMEM
select ZONE_DMA
help
diff --git a/arch/alpha/include/asm/tlb.h b/arch/alpha/include/asm/tlb.h
index 4f79e331af5ea..ad586b898fd6b 100644
--- a/arch/alpha/include/asm/tlb.h
+++ b/arch/alpha/include/asm/tlb.h
@@ -4,7 +4,7 @@
#include <asm-generic/tlb.h>
-#define __pte_free_tlb(tlb, pte, address) pte_free((tlb)->mm, pte)
-#define __pmd_free_tlb(tlb, pmd, address) pmd_free((tlb)->mm, pmd)
-
+#define __pte_free_tlb(tlb, pte, address) tlb_remove_ptdesc((tlb), page_ptdesc(pte))
+#define __pmd_free_tlb(tlb, pmd, address) tlb_remove_ptdesc((tlb), virt_to_ptdesc(pmd))
+
#endif
--
2.20.1
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH v3 3/7] LoongArch: mm: enable MMU_GATHER_RCU_TABLE_FREE
2025-12-17 9:45 [PATCH v3 0/7] enable PT_RECLAIM on all 64-bit architectures Qi Zheng
2025-12-17 9:45 ` [PATCH v3 1/7] mm: change mm/pt_reclaim.c to use asm/tlb.h instead of asm-generic/tlb.h Qi Zheng
2025-12-17 9:45 ` [PATCH v3 2/7] alpha: mm: enable MMU_GATHER_RCU_TABLE_FREE Qi Zheng
@ 2025-12-17 9:45 ` Qi Zheng
2025-12-17 9:45 ` [PATCH v3 4/7] mips: " Qi Zheng
` (3 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Qi Zheng @ 2025-12-17 9:45 UTC (permalink / raw)
To: will, aneesh.kumar, npiggin, peterz, dev.jain, akpm, david,
ioworker0, linmag7
Cc: linux-arch, linux-kernel, linux-mm, linux-alpha, loongarch,
linux-mips, linux-parisc, linux-um, Qi Zheng, Huacai Chen,
WANG Xuerui
From: Qi Zheng <zhengqi.arch@bytedance.com>
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@bytedance.com>
Cc: Huacai Chen <chenhuacai@kernel.org>
Cc: WANG Xuerui <kernel@xen0n.name>
---
arch/loongarch/Kconfig | 1 +
arch/loongarch/include/asm/pgalloc.h | 7 +++----
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig
index 730f342145197..43d5b863e1fb2 100644
--- a/arch/loongarch/Kconfig
+++ b/arch/loongarch/Kconfig
@@ -187,6 +187,7 @@ config LOONGARCH
select IRQ_LOONGARCH_CPU
select LOCK_MM_AND_FIND_VMA
select MMU_GATHER_MERGE_VMAS if MMU
+ select MMU_GATHER_RCU_TABLE_FREE
select MODULES_USE_ELF_RELA if MODULES
select NEED_PER_CPU_EMBED_FIRST_CHUNK
select NEED_PER_CPU_PAGE_FIRST_CHUNK
diff --git a/arch/loongarch/include/asm/pgalloc.h b/arch/loongarch/include/asm/pgalloc.h
index 08dcc698ec184..248f62d0b590e 100644
--- a/arch/loongarch/include/asm/pgalloc.h
+++ b/arch/loongarch/include/asm/pgalloc.h
@@ -55,8 +55,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
return pte;
}
-#define __pte_free_tlb(tlb, pte, address) \
- tlb_remove_ptdesc((tlb), page_ptdesc(pte))
+#define __pte_free_tlb(tlb, pte, address) tlb_remove_ptdesc((tlb), page_ptdesc(pte))
#ifndef __PAGETABLE_PMD_FOLDED
@@ -79,7 +78,7 @@ 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))
#endif
@@ -99,7 +98,7 @@ 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))
#endif /* __PAGETABLE_PUD_FOLDED */
--
2.20.1
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH v3 4/7] mips: mm: enable MMU_GATHER_RCU_TABLE_FREE
2025-12-17 9:45 [PATCH v3 0/7] enable PT_RECLAIM on all 64-bit architectures Qi Zheng
` (2 preceding siblings ...)
2025-12-17 9:45 ` [PATCH v3 3/7] LoongArch: " Qi Zheng
@ 2025-12-17 9:45 ` Qi Zheng
2025-12-17 9:45 ` [PATCH v3 5/7] parisc: " Qi Zheng
` (2 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Qi Zheng @ 2025-12-17 9:45 UTC (permalink / raw)
To: will, aneesh.kumar, npiggin, peterz, dev.jain, akpm, david,
ioworker0, linmag7
Cc: linux-arch, linux-kernel, linux-mm, linux-alpha, loongarch,
linux-mips, linux-parisc, linux-um, Qi Zheng,
Thomas Bogendoerfer
From: Qi Zheng <zhengqi.arch@bytedance.com>
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@bytedance.com>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
arch/mips/Kconfig | 1 +
arch/mips/include/asm/pgalloc.h | 7 +++----
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index b88b97139fa8e..c0c94e26ce396 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -99,6 +99,7 @@ config MIPS
select IRQ_FORCED_THREADING
select ISA if EISA
select LOCK_MM_AND_FIND_VMA
+ select MMU_GATHER_RCU_TABLE_FREE
select MODULES_USE_ELF_REL if MODULES
select MODULES_USE_ELF_RELA if MODULES && 64BIT
select PERF_USE_VMALLOC
diff --git a/arch/mips/include/asm/pgalloc.h b/arch/mips/include/asm/pgalloc.h
index 7a04381efa0b5..895bf79e76762 100644
--- a/arch/mips/include/asm/pgalloc.h
+++ b/arch/mips/include/asm/pgalloc.h
@@ -48,8 +48,7 @@ static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
extern void pgd_init(void *addr);
extern pgd_t *pgd_alloc(struct mm_struct *mm);
-#define __pte_free_tlb(tlb, pte, address) \
- tlb_remove_ptdesc((tlb), page_ptdesc(pte))
+#define __pte_free_tlb(tlb, pte, address) tlb_remove_ptdesc((tlb), page_ptdesc(pte))
#ifndef __PAGETABLE_PMD_FOLDED
@@ -72,7 +71,7 @@ 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))
#endif
@@ -97,7 +96,7 @@ static inline void p4d_populate(struct mm_struct *mm, p4d_t *p4d, pud_t *pud)
set_p4d(p4d, __p4d((unsigned long)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))
#endif /* __PAGETABLE_PUD_FOLDED */
--
2.20.1
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH v3 5/7] parisc: mm: enable MMU_GATHER_RCU_TABLE_FREE
2025-12-17 9:45 [PATCH v3 0/7] enable PT_RECLAIM on all 64-bit architectures Qi Zheng
` (3 preceding siblings ...)
2025-12-17 9:45 ` [PATCH v3 4/7] mips: " Qi Zheng
@ 2025-12-17 9:45 ` Qi Zheng
2025-12-17 9:45 ` [PATCH v3 6/7] um: " Qi Zheng
2025-12-17 9:45 ` [PATCH v3 7/7] mm: make PT_RECLAIM depends on MMU_GATHER_RCU_TABLE_FREE Qi Zheng
6 siblings, 0 replies; 10+ messages in thread
From: Qi Zheng @ 2025-12-17 9:45 UTC (permalink / raw)
To: will, aneesh.kumar, npiggin, peterz, dev.jain, akpm, david,
ioworker0, linmag7
Cc: linux-arch, linux-kernel, linux-mm, linux-alpha, loongarch,
linux-mips, linux-parisc, linux-um, Qi Zheng,
James E.J. Bottomley, Helge Deller
From: Qi Zheng <zhengqi.arch@bytedance.com>
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@bytedance.com>
Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
Cc: Helge Deller <deller@gmx.de>
---
arch/parisc/Kconfig | 1 +
arch/parisc/include/asm/tlb.h | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
index 47fd9662d8005..62d5a89d5c7bc 100644
--- a/arch/parisc/Kconfig
+++ b/arch/parisc/Kconfig
@@ -79,6 +79,7 @@ config PARISC
select GENERIC_CLOCKEVENTS
select CPU_NO_EFFICIENT_FFS
select THREAD_INFO_IN_TASK
+ select MMU_GATHER_RCU_TABLE_FREE
select NEED_DMA_MAP_STATE
select NEED_SG_DMA_LENGTH
select HAVE_ARCH_KGDB
diff --git a/arch/parisc/include/asm/tlb.h b/arch/parisc/include/asm/tlb.h
index 44235f367674d..4501fee0a8fa4 100644
--- a/arch/parisc/include/asm/tlb.h
+++ b/arch/parisc/include/asm/tlb.h
@@ -5,8 +5,8 @@
#include <asm-generic/tlb.h>
#if CONFIG_PGTABLE_LEVELS == 3
-#define __pmd_free_tlb(tlb, pmd, addr) pmd_free((tlb)->mm, pmd)
+#define __pmd_free_tlb(tlb, pmd, addr) tlb_remove_ptdesc((tlb), virt_to_ptdesc(pmd))
#endif
-#define __pte_free_tlb(tlb, pte, addr) pte_free((tlb)->mm, pte)
+#define __pte_free_tlb(tlb, pte, addr) tlb_remove_ptdesc((tlb), page_ptdesc(pte))
#endif
--
2.20.1
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH v3 6/7] um: mm: enable MMU_GATHER_RCU_TABLE_FREE
2025-12-17 9:45 [PATCH v3 0/7] enable PT_RECLAIM on all 64-bit architectures Qi Zheng
` (4 preceding siblings ...)
2025-12-17 9:45 ` [PATCH v3 5/7] parisc: " Qi Zheng
@ 2025-12-17 9:45 ` Qi Zheng
2025-12-17 9:45 ` [PATCH v3 7/7] mm: make PT_RECLAIM depends on MMU_GATHER_RCU_TABLE_FREE Qi Zheng
6 siblings, 0 replies; 10+ messages in thread
From: Qi Zheng @ 2025-12-17 9:45 UTC (permalink / raw)
To: will, aneesh.kumar, npiggin, peterz, dev.jain, akpm, david,
ioworker0, linmag7
Cc: linux-arch, linux-kernel, linux-mm, linux-alpha, loongarch,
linux-mips, linux-parisc, linux-um, Qi Zheng, Richard Weinberger,
Anton Ivanov, Johannes Berg
From: Qi Zheng <zhengqi.arch@bytedance.com>
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@bytedance.com>
Cc: Richard Weinberger <richard@nod.at>
Cc: Anton Ivanov <anton.ivanov@cambridgegreys.com>
Cc: Johannes Berg <johannes@sipsolutions.net>
---
arch/um/Kconfig | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/um/Kconfig b/arch/um/Kconfig
index 8415d39b0d430..098cda44db225 100644
--- a/arch/um/Kconfig
+++ b/arch/um/Kconfig
@@ -42,6 +42,7 @@ config UML
select HAVE_SYSCALL_TRACEPOINTS
select THREAD_INFO_IN_TASK
select SPARSE_IRQ
+ select MMU_GATHER_RCU_TABLE_FREE
config MMU
bool
--
2.20.1
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH v3 7/7] mm: make PT_RECLAIM depends on MMU_GATHER_RCU_TABLE_FREE
2025-12-17 9:45 [PATCH v3 0/7] enable PT_RECLAIM on all 64-bit architectures Qi Zheng
` (5 preceding siblings ...)
2025-12-17 9:45 ` [PATCH v3 6/7] um: " Qi Zheng
@ 2025-12-17 9:45 ` Qi Zheng
2025-12-31 9:42 ` Wei Yang
6 siblings, 1 reply; 10+ messages in thread
From: Qi Zheng @ 2025-12-17 9:45 UTC (permalink / raw)
To: will, aneesh.kumar, npiggin, peterz, dev.jain, akpm, david,
ioworker0, linmag7
Cc: linux-arch, linux-kernel, linux-mm, linux-alpha, loongarch,
linux-mips, linux-parisc, linux-um, Qi Zheng
From: Qi Zheng <zhengqi.arch@bytedance.com>
The PT_RECLAIM can work on all architectures that support
MMU_GATHER_RCU_TABLE_FREE, so make PT_RECLAIM depends on
MMU_GATHER_RCU_TABLE_FREE.
BTW, change PT_RECLAIM to be enabled by default, since nobody should want
to turn it off.
Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
---
arch/x86/Kconfig | 1 -
mm/Kconfig | 9 ++-------
2 files changed, 2 insertions(+), 8 deletions(-)
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 80527299f859a..0d22da56a71b0 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -331,7 +331,6 @@ config X86
select FUNCTION_ALIGNMENT_4B
imply IMA_SECURE_AND_OR_TRUSTED_BOOT if EFI
select HAVE_DYNAMIC_FTRACE_NO_PATCHABLE
- select ARCH_SUPPORTS_PT_RECLAIM if X86_64
select ARCH_SUPPORTS_SCHED_SMT if SMP
select SCHED_SMT if SMP
select ARCH_SUPPORTS_SCHED_CLUSTER if SMP
diff --git a/mm/Kconfig b/mm/Kconfig
index bd0ea5454af82..fc00b429b7129 100644
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -1447,14 +1447,9 @@ config ARCH_HAS_USER_SHADOW_STACK
The architecture has hardware support for userspace shadow call
stacks (eg, x86 CET, arm64 GCS or RISC-V Zicfiss).
-config ARCH_SUPPORTS_PT_RECLAIM
- def_bool n
-
config PT_RECLAIM
- bool "reclaim empty user page table pages"
- default y
- depends on ARCH_SUPPORTS_PT_RECLAIM && MMU && SMP
- select MMU_GATHER_RCU_TABLE_FREE
+ def_bool y
+ depends on MMU_GATHER_RCU_TABLE_FREE
help
Try to reclaim empty user page table pages in paths other than munmap
and exit_mmap path.
--
2.20.1
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: [PATCH v3 7/7] mm: make PT_RECLAIM depends on MMU_GATHER_RCU_TABLE_FREE
2025-12-17 9:45 ` [PATCH v3 7/7] mm: make PT_RECLAIM depends on MMU_GATHER_RCU_TABLE_FREE Qi Zheng
@ 2025-12-31 9:42 ` Wei Yang
2025-12-31 9:52 ` Qi Zheng
0 siblings, 1 reply; 10+ messages in thread
From: Wei Yang @ 2025-12-31 9:42 UTC (permalink / raw)
To: Qi Zheng
Cc: will, aneesh.kumar, npiggin, peterz, dev.jain, akpm, david,
ioworker0, linmag7, linux-arch, linux-kernel, linux-mm,
linux-alpha, loongarch, linux-mips, linux-parisc, linux-um,
Qi Zheng
On Wed, Dec 17, 2025 at 05:45:48PM +0800, Qi Zheng wrote:
>From: Qi Zheng <zhengqi.arch@bytedance.com>
>
>The PT_RECLAIM can work on all architectures that support
>MMU_GATHER_RCU_TABLE_FREE, so make PT_RECLAIM depends on
>MMU_GATHER_RCU_TABLE_FREE.
>
>BTW, change PT_RECLAIM to be enabled by default, since nobody should want
>to turn it off.
>
>Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
>---
> arch/x86/Kconfig | 1 -
> mm/Kconfig | 9 ++-------
> 2 files changed, 2 insertions(+), 8 deletions(-)
>
>diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
>index 80527299f859a..0d22da56a71b0 100644
>--- a/arch/x86/Kconfig
>+++ b/arch/x86/Kconfig
>@@ -331,7 +331,6 @@ config X86
> select FUNCTION_ALIGNMENT_4B
> imply IMA_SECURE_AND_OR_TRUSTED_BOOT if EFI
> select HAVE_DYNAMIC_FTRACE_NO_PATCHABLE
>- select ARCH_SUPPORTS_PT_RECLAIM if X86_64
> select ARCH_SUPPORTS_SCHED_SMT if SMP
> select SCHED_SMT if SMP
> select ARCH_SUPPORTS_SCHED_CLUSTER if SMP
>diff --git a/mm/Kconfig b/mm/Kconfig
>index bd0ea5454af82..fc00b429b7129 100644
>--- a/mm/Kconfig
>+++ b/mm/Kconfig
>@@ -1447,14 +1447,9 @@ config ARCH_HAS_USER_SHADOW_STACK
> The architecture has hardware support for userspace shadow call
> stacks (eg, x86 CET, arm64 GCS or RISC-V Zicfiss).
>
>-config ARCH_SUPPORTS_PT_RECLAIM
>- def_bool n
>-
> config PT_RECLAIM
>- bool "reclaim empty user page table pages"
>- default y
>- depends on ARCH_SUPPORTS_PT_RECLAIM && MMU && SMP
>- select MMU_GATHER_RCU_TABLE_FREE
>+ def_bool y
>+ depends on MMU_GATHER_RCU_TABLE_FREE
> help
> Try to reclaim empty user page table pages in paths other than munmap
> and exit_mmap path.
Hi, Qi
I am new to PT_RECLAIM, when reading related code I got one question.
Before this patch, we could have this config combination:
CONFIG_MMU_GATHER_RCU_TABLE_FREE & !CONFIG_PT_RECLAIM
This means tlb_remove_table_free() is rcu version while tlb_remove_table_one()
is semi rcu version.
I am curious could we use rcu version tlb_remove_table_one() for this case?
Use rcu version tlb_remove_table_one() if CONFIG_MMU_GATHER_RCU_TABLE_FREE. Is
there some limitation here?
Thanks in advance for your explanation.
--
Wei Yang
Help you, Help me
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: [PATCH v3 7/7] mm: make PT_RECLAIM depends on MMU_GATHER_RCU_TABLE_FREE
2025-12-31 9:42 ` Wei Yang
@ 2025-12-31 9:52 ` Qi Zheng
0 siblings, 0 replies; 10+ messages in thread
From: Qi Zheng @ 2025-12-31 9:52 UTC (permalink / raw)
To: Wei Yang
Cc: will, aneesh.kumar, npiggin, peterz, dev.jain, akpm, david,
ioworker0, linmag7, linux-arch, linux-kernel, linux-mm,
linux-alpha, loongarch, linux-mips, linux-parisc, linux-um,
Qi Zheng
On 12/31/25 5:42 PM, Wei Yang wrote:
> On Wed, Dec 17, 2025 at 05:45:48PM +0800, Qi Zheng wrote:
>> From: Qi Zheng <zhengqi.arch@bytedance.com>
>>
>> The PT_RECLAIM can work on all architectures that support
>> MMU_GATHER_RCU_TABLE_FREE, so make PT_RECLAIM depends on
>> MMU_GATHER_RCU_TABLE_FREE.
>>
>> BTW, change PT_RECLAIM to be enabled by default, since nobody should want
>> to turn it off.
>>
>> Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
>> ---
>> arch/x86/Kconfig | 1 -
>> mm/Kconfig | 9 ++-------
>> 2 files changed, 2 insertions(+), 8 deletions(-)
>>
>> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
>> index 80527299f859a..0d22da56a71b0 100644
>> --- a/arch/x86/Kconfig
>> +++ b/arch/x86/Kconfig
>> @@ -331,7 +331,6 @@ config X86
>> select FUNCTION_ALIGNMENT_4B
>> imply IMA_SECURE_AND_OR_TRUSTED_BOOT if EFI
>> select HAVE_DYNAMIC_FTRACE_NO_PATCHABLE
>> - select ARCH_SUPPORTS_PT_RECLAIM if X86_64
>> select ARCH_SUPPORTS_SCHED_SMT if SMP
>> select SCHED_SMT if SMP
>> select ARCH_SUPPORTS_SCHED_CLUSTER if SMP
>> diff --git a/mm/Kconfig b/mm/Kconfig
>> index bd0ea5454af82..fc00b429b7129 100644
>> --- a/mm/Kconfig
>> +++ b/mm/Kconfig
>> @@ -1447,14 +1447,9 @@ config ARCH_HAS_USER_SHADOW_STACK
>> The architecture has hardware support for userspace shadow call
>> stacks (eg, x86 CET, arm64 GCS or RISC-V Zicfiss).
>>
>> -config ARCH_SUPPORTS_PT_RECLAIM
>> - def_bool n
>> -
>> config PT_RECLAIM
>> - bool "reclaim empty user page table pages"
>> - default y
>> - depends on ARCH_SUPPORTS_PT_RECLAIM && MMU && SMP
>> - select MMU_GATHER_RCU_TABLE_FREE
>> + def_bool y
>> + depends on MMU_GATHER_RCU_TABLE_FREE
>> help
>> Try to reclaim empty user page table pages in paths other than munmap
>> and exit_mmap path.
>
> Hi, Qi
>
> I am new to PT_RECLAIM, when reading related code I got one question.
>
> Before this patch, we could have this config combination:
>
> CONFIG_MMU_GATHER_RCU_TABLE_FREE & !CONFIG_PT_RECLAIM
>
> This means tlb_remove_table_free() is rcu version while tlb_remove_table_one()
> is semi rcu version.
>
> I am curious could we use rcu version tlb_remove_table_one() for this case?
> Use rcu version tlb_remove_table_one() if CONFIG_MMU_GATHER_RCU_TABLE_FREE. Is
> there some limitation here?
I think there's no problem. The rcu version can also ensure that the
fast GUP works well.
>
> Thanks in advance for your explanation.
>
>
^ permalink raw reply [flat|nested] 10+ messages in thread