On Tue, Jan 14, 2025 at 10:26:54AM +0800, Qi Zheng wrote: > 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 <zhengqi.arch@xxxxxxxxxxxxx> > > > Originally-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> > > > Reviewed-by: Kevin Brodsky <kevin.brodsky@xxxxxxx> > > > Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx > > > --- > > > 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. Sorry, I missed that. In which case: Acked-by: Will Deacon <will@xxxxxxxxxx> Will