On Mon, Sep 07, 2026 at 02:07:37PM -0700, Suren Baghdasaryan wrote: > On Tue, Sep 1, 2026 at 4:06 AM Lorenzo Stoakes (ARM) <[email protected]> wrote: > > > > Each of these architectures directly free page tables without routing these > > changes through tlb_remove_ptdesc(). > > > > The use of tlb_remove_ptdesc() is required for > > CONFIG_MMU_GATHER_RCU_TABLE_FREE to correctly free page tables under RCU, > > so simply update these architectures to use these functions. > > > > Since none of the architectures share page tables or do anything unusual, > > nothing complicated is required here. > > > > Therefore this is simply a mechanical change - convert __pud_free_tlb(), > > __pmd_free_tlb() and __pte_free_tlb() to use tlb_remove_ptdesc() as > > required. > > > > At the point this is in place, all mmu_gather page table freeing is > > performed under RCU, and thus MMU_GATHER_RCU_TABLE_FREE is selected for > > each architecture. > > > > This forms part of an overall effort to switch every architecture to this > > mode. > > > > Signed-off-by: Lorenzo Stoakes (ARM) <[email protected]> > > --- > > arch/arc/Kconfig | 1 + > > arch/arc/include/asm/pgalloc.h | 6 +++--- > > arch/microblaze/Kconfig | 1 + > > arch/microblaze/include/asm/pgalloc.h | 2 +- > > arch/xtensa/Kconfig | 1 + > > arch/xtensa/include/asm/tlb.h | 2 +- > > 6 files changed, 8 insertions(+), 5 deletions(-) > > > > diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig > > index 2ed7186c81c5..7a7542b61823 100644 > > --- a/arch/arc/Kconfig > > +++ b/arch/arc/Kconfig > > @@ -47,6 +47,7 @@ config ARC > > select HAVE_SYSCALL_TRACEPOINTS > > select IRQ_DOMAIN > > select LOCK_MM_AND_FIND_VMA > > + select MMU_GATHER_RCU_TABLE_FREE > > select MODULES_USE_ELF_RELA > > select OF > > select OF_EARLY_FLATTREE > > diff --git a/arch/arc/include/asm/pgalloc.h b/arch/arc/include/asm/pgalloc.h > > index dfae070fe8d5..9b6c37f92e97 100644 > > --- a/arch/arc/include/asm/pgalloc.h > > +++ b/arch/arc/include/asm/pgalloc.h > > @@ -72,7 +72,7 @@ static inline void p4d_populate(struct mm_struct *mm, > > p4d_t *p4dp, pud_t *pudp) > > set_p4d(p4dp, __p4d((unsigned long)pudp)); > > } > > > > -#define __pud_free_tlb(tlb, pmd, addr) pud_free((tlb)->mm, pmd) > > +#define __pud_free_tlb(tlb, pmd, addr) tlb_remove_ptdesc((tlb), > > virt_to_ptdesc(pmd)) > > > > #endif > > > > @@ -83,10 +83,10 @@ static inline void pud_populate(struct mm_struct *mm, > > pud_t *pudp, pmd_t *pmdp) > > set_pud(pudp, __pud((unsigned long)pmdp)); > > } > > > > -#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 /* _ASM_ARC_PGALLOC_H */ > > diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig > > index 484ebb3baedf..af7e821e96c1 100644 > > --- a/arch/microblaze/Kconfig > > +++ b/arch/microblaze/Kconfig > > @@ -41,6 +41,7 @@ config MICROBLAZE > > select PCI_SYSCALL if PCI > > select CPU_NO_EFFICIENT_FFS > > select MMU_GATHER_NO_RANGE > > + select MMU_GATHER_RCU_TABLE_FREE > > select SPARSE_IRQ > > select ZONE_DMA > > select TRACE_IRQFLAGS_SUPPORT > > diff --git a/arch/microblaze/include/asm/pgalloc.h > > b/arch/microblaze/include/asm/pgalloc.h > > index 084a8a0dc239..ffee6a009219 100644 > > --- a/arch/microblaze/include/asm/pgalloc.h > > +++ b/arch/microblaze/include/asm/pgalloc.h > > @@ -25,7 +25,7 @@ extern void __bad_pte(pmd_t *pmd); > > > > extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm); > > > > -#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)) > > > > #define pmd_populate(mm, pmd, pte) \ > > (pmd_val(*(pmd)) = (unsigned long)page_address(pte)) > > diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig > > index f2f9cd9cde50..33c4caee30e2 100644 > > --- a/arch/xtensa/Kconfig > > +++ b/arch/xtensa/Kconfig > > @@ -55,6 +55,7 @@ config XTENSA > > select HAVE_VIRT_CPU_ACCOUNTING_GEN > > select IRQ_DOMAIN > > select LOCK_MM_AND_FIND_VMA > > + select MMU_GATHER_RCU_TABLE_FREE if MMU > > And MMU is required because NOMMU does not perform mmu_gather > operations, same as in the previous patch? If so, maybe make a note of > it in the changelog?
Right yup. Will update! > > > select MODULES_USE_ELF_RELA > > select PERF_USE_VMALLOC > > select TRACE_IRQFLAGS_SUPPORT > > diff --git a/arch/xtensa/include/asm/tlb.h b/arch/xtensa/include/asm/tlb.h > > index 8c3ceb427018..6fb7b78154f6 100644 > > --- a/arch/xtensa/include/asm/tlb.h > > +++ b/arch/xtensa/include/asm/tlb.h > > @@ -16,7 +16,7 @@ > > > > #include <asm-generic/tlb.h> > > > > -#define __pte_free_tlb(tlb, pte, address) pte_free((tlb)->mm, pte) > > +#define __pte_free_tlb(tlb, pte, address) tlb_remove_ptdesc((tlb), > > page_ptdesc(pte)) > > > > void check_tlb_sanity(void); > > > > > > -- > > 2.55.0 > > -- Cheers, Lorenzo
