On Tue, Sep 22, 2026 at 04:35:41PM +0100, Lorenzo Stoakes (ARM) wrote: >Careful handling is required for sparc32 which implements page tables as >part of a shared backing page. > >To support this, a custom __tlb_remove_table() function is required, as >specified by CONFIG_HAVE_ARCH_TLB_REMOVE_TABLE. > >This allows __pte_free_tlb() and __pmd_free_tlb() to specify which page >table level is being freed, which is transmitted to __tlb_remove_table() >through setting the lowest bit of the page table to 1 for a PMD and 0 for a >PTE (the page tables are 256-byte aligned so this is safe to do). > >Next, since the page table freeing is done via RCU callback, and thus might >be executed in softirq context, update the spin locks to IRQ save/restore. > >Then, in __tlb_remove_table(), figure out whether to free a PMD page table >via free_pmd_fast() or a PTE via the newly introduced __pte_free() >function, using the lower bit encoded in __pte_free_tlb() or >__pmd_free_tlb() to determine which to call. > >As part of this change use this spin lock rather than mm->page_table_lock >for all shared page table exclusion, as RCU freeing means that page tables >can be freed from soft IRQ context so both don't have an mm and also >mm->page_table_lock is not IRQ-safe. > >Note that the specification of CONFIG_HAVE_ARCH_TLB_REMOVE_TABLE disables >CONFIG_PT_RECLAIM for sparc32, which mirrors sparc64. > >This forms part of an overall effort to switch every architecture to this >mode, and with it complete, means every architecture now supports >CONFIG_MMU_GATHER_RCU_TABLE_FREE. > >Acked-by: Kiryl Shutsemau (Meta) <[email protected]> >Signed-off-by: Lorenzo Stoakes (ARM) <[email protected]> >---
Also ran page-table teardown stress on qemu-system-sparc (SS-20, sun4m, CONFIG_SPARC32=y). All 24 rounds ran cleanly :) Feel free to add: Tested-by: Lance Yang <[email protected]> Acked-by: Lance Yang <[email protected]>
