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.

>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.