Re: [PATCH v4 7/8] mm: convert __HAVE_ARCH_TLB_REMOVE_TABLE to CONFIG_HAVE_ARCH_TLB_REMOVE_TABLE config
Qi Zheng <[email protected]>
| Newsgroups | org.kernel.vger.sparclinux,dev.linux.lists.loongarch,org.infradead.lists.linux-um,org.kernel.vger.linux-alpha,org.kernel.vger.linux-arch,org.kernel.vger.linux-kernel,org.kernel.vger.linux-mips,org.kernel.vger.linux-parisc,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On 2/6/26 7:45 PM, David Hildenbrand (Arm) wrote: > On 2/6/26 12:13, Qi Zheng wrote: >> >> >> On 2/6/26 7:06 PM, David Hildenbrand (Arm) wrote: >>> On 1/27/26 13:13, Qi Zheng wrote: >>>> From: Qi Zheng <[email protected]> >>>> >>>> For architectures that define __HAVE_ARCH_TLB_REMOVE_TABLE, the page >>>> tables at the pmd/pud level are generally not of struct ptdesc type, >>>> and >>>> do not have pt_rcu_head member, thus these architectures cannot support >>>> PT_RECLAIM. >>>> >>>> In preparation for enabling PT_RECLAIM on more architectures, convert >>>> __HAVE_ARCH_TLB_REMOVE_TABLE to CONFIG_HAVE_ARCH_TLB_REMOVE_TABLE >>>> config, >>>> so that we can make conditional judgments in Kconfig. >>>> >>>> Signed-off-by: Qi Zheng <[email protected]> >>>> --- >>>> arch/powerpc/Kconfig | 1 + >>>> arch/powerpc/include/asm/tlb.h | 1 - >>>> arch/sparc/Kconfig | 1 + >>>> arch/sparc/include/asm/tlb_64.h | 1 - >>>> include/asm-generic/tlb.h | 2 +- >>>> mm/Kconfig | 3 +++ >>>> 6 files changed, 6 insertions(+), 3 deletions(-) >>>> >>>> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig >>>> index 9537a61ebae02..b47aa8fd62742 100644 >>>> --- a/arch/powerpc/Kconfig >>>> +++ b/arch/powerpc/Kconfig >>>> @@ -304,6 +304,7 @@ config PPC >>>> select LOCK_MM_AND_FIND_VMA >>>> select MMU_GATHER_PAGE_SIZE >>>> select MMU_GATHER_RCU_TABLE_FREE >>>> + select HAVE_ARCH_TLB_REMOVE_TABLE >>>> select MMU_GATHER_MERGE_VMAS >>>> select MMU_LAZY_TLB_SHOOTDOWN if PPC_BOOK3S_64 >>>> select MODULES_USE_ELF_RELA >>>> diff --git a/arch/powerpc/include/asm/tlb.h b/arch/powerpc/include/ >>>> asm/tlb.h >>>> index 2058e8d3e0138..1ca7d4c4b90db 100644 >>>> --- a/arch/powerpc/include/asm/tlb.h >>>> +++ b/arch/powerpc/include/asm/tlb.h >>>> @@ -37,7 +37,6 @@ extern void tlb_flush(struct mmu_gather *tlb); >>>> */ >>>> #define tlb_needs_table_invalidate() radix_enabled() >>>> -#define __HAVE_ARCH_TLB_REMOVE_TABLE >>>> /* Get the generic bits... */ >>>> #include <asm-generic/tlb.h> >>>> diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig >>>> index a630d373e6453..25fa2908d6152 100644 >>>> --- a/arch/sparc/Kconfig >>>> +++ b/arch/sparc/Kconfig >>>> @@ -74,6 +74,7 @@ config SPARC64 >>>> select HAVE_KRETPROBES >>>> select HAVE_KPROBES >>>> select MMU_GATHER_RCU_TABLE_FREE if SMP >>>> + select HAVE_ARCH_TLB_REMOVE_TABLE if SMP >>> >>> Why the SMP? At least in tlb_64.h, it was not protected by SMP IIUC. >> >> Ah, It's just simply aligned with the MMU_GATHER_RCU_TABLE_FREE above. > > But does that work as expected for !SMP? In the case of !SMP, tlb_remove_table() will not be called: static inline void pgtable_free_tlb(struct mmu_gather *tlb, void *table, bool is_page) { pgtable_free(table, is_page); } so I think it's okay to only select it in case of SMP. >