Re: [PATCH v5 05/17] arm64: pgtable: use mmu gather to free p4d level page table
Qi Zheng <[email protected]>
| Newsgroups | gmane.linux.ports.sh.devel,gmane.linux.kernel.mm,gmane.linux.ports.arm.kernel,gmane.linux.ports.ppc64.devel,gmane.linux.ports.riscv,gmane.linux.ports.sparc,gmane.linux.kernel,gmane.linux.kernel.cross-arch,gmane.linux.ports.hexagon,gmane.linux.ports.mips,gmane.linux.uml.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi Will, On 2025/1/14 00:26, Will Deacon wrote: > On Wed, Jan 08, 2025 at 02:57:21PM +0800, Qi Zheng wrote: >> Like other levels of page tables, also use mmu gather mechanism to free >> p4d level page table. >> >> Signed-off-by: Qi Zheng <[email protected]> >> Originally-by: Peter Zijlstra (Intel) <[email protected]> >> Reviewed-by: Kevin Brodsky <[email protected]> >> Cc: [email protected] >> --- >> arch/arm64/include/asm/pgalloc.h | 1 - >> arch/arm64/include/asm/tlb.h | 14 ++++++++++++++ >> 2 files changed, 14 insertions(+), 1 deletion(-) >> >> diff --git a/arch/arm64/include/asm/pgalloc.h b/arch/arm64/include/asm/pgalloc.h >> index 2965f5a7e39e3..1b4509d3382c6 100644 >> --- a/arch/arm64/include/asm/pgalloc.h >> +++ b/arch/arm64/include/asm/pgalloc.h >> @@ -85,7 +85,6 @@ static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgdp, p4d_t *p4dp) >> __pgd_populate(pgdp, __pa(p4dp), pgdval); >> } >> >> -#define __p4d_free_tlb(tlb, p4d, addr) p4d_free((tlb)->mm, p4d) >> #else >> static inline void __pgd_populate(pgd_t *pgdp, phys_addr_t p4dp, pgdval_t prot) >> { >> diff --git a/arch/arm64/include/asm/tlb.h b/arch/arm64/include/asm/tlb.h >> index a947c6e784ed2..445282cde9afb 100644 >> --- a/arch/arm64/include/asm/tlb.h >> +++ b/arch/arm64/include/asm/tlb.h >> @@ -111,4 +111,18 @@ static inline void __pud_free_tlb(struct mmu_gather *tlb, pud_t *pudp, >> } >> #endif >> >> +#if CONFIG_PGTABLE_LEVELS > 4 >> +static inline void __p4d_free_tlb(struct mmu_gather *tlb, p4d_t *p4dp, >> + unsigned long addr) >> +{ >> + struct ptdesc *ptdesc = virt_to_ptdesc(p4dp); >> + >> + if (!pgtable_l5_enabled()) >> + return; >> + >> + pagetable_p4d_dtor(ptdesc); >> + tlb_remove_ptdesc(tlb, ptdesc); >> +} > > Should we update p4d_free() to call the destructor, too? It looks like > it just does free_page() atm. The patch #3 introduces the generic p4d_free() and lets arm64 to use it. The patch #4 adds the destructor to generic p4d_free(). So IIUC, there is no problem here. Thanks! > > Will