Message ID | cover.1737637631.git.zhengqi.arch@bytedance.com (mailing list archive) |
---|---|
Headers | show |
Series | remove tlb_remove_page_ptdesc() | expand |
On Thu, Jan 23, 2025 at 09:26:13PM +0800, Qi Zheng wrote: > Hi all, > > As suggested by Peter Zijlstra below [1], this series aims to remove > tlb_remove_page_ptdesc(). > > : Fundamentally tlb_remove_page() is about removing *pages* as from a PTE, > : there should not be a page-table anywhere near here *ever*. > : > : Yes, some architectures use tlb_remove_page() for page-tables too, but > : that is more or less an implementation detail that can be fixed. > > After this series, all architectures use tlb_remove_table() or tlb_remove_ptdesc() > to remove the page table pages. In the future, once all architectures using > tlb_remove_table() have also converted to using struct ptdesc (eg. powerpc), it > may be possible to use only tlb_remove_ptdesc(). Right, so I don't think Sparc and Power care to use ptdesc, they're using non page page-tables. At the very least we should do something like this, the only point of having tlb_remove_ptdesc() is type safety, there really is no benefit from it in any other way. --- diff --git a/include/asm-generic/tlb.h b/include/asm-generic/tlb.h index dec030cb1210..a6731328db6f 100644 --- a/include/asm-generic/tlb.h +++ b/include/asm-generic/tlb.h @@ -504,7 +504,7 @@ static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page) return tlb_remove_page_size(tlb, page, PAGE_SIZE); } -static inline void tlb_remove_ptdesc(struct mmu_gather *tlb, void *pt) +static inline void tlb_remove_ptdesc(struct mmu_gather *tlb, struct ptdesc *pt) { tlb_remove_table(tlb, pt); }
On 2025/1/24 19:47, Peter Zijlstra wrote: > On Thu, Jan 23, 2025 at 09:26:13PM +0800, Qi Zheng wrote: >> Hi all, >> >> As suggested by Peter Zijlstra below [1], this series aims to remove >> tlb_remove_page_ptdesc(). >> >> : Fundamentally tlb_remove_page() is about removing *pages* as from a PTE, >> : there should not be a page-table anywhere near here *ever*. >> : >> : Yes, some architectures use tlb_remove_page() for page-tables too, but >> : that is more or less an implementation detail that can be fixed. >> >> After this series, all architectures use tlb_remove_table() or tlb_remove_ptdesc() >> to remove the page table pages. In the future, once all architectures using >> tlb_remove_table() have also converted to using struct ptdesc (eg. powerpc), it >> may be possible to use only tlb_remove_ptdesc(). > > Right, so I don't think Sparc and Power care to use ptdesc, they're > using non page page-tables. > > At the very least we should do something like this, the only point of > having tlb_remove_ptdesc() is type safety, there really is no benefit > from it in any other way. > > --- > diff --git a/include/asm-generic/tlb.h b/include/asm-generic/tlb.h > index dec030cb1210..a6731328db6f 100644 > --- a/include/asm-generic/tlb.h > +++ b/include/asm-generic/tlb.h > @@ -504,7 +504,7 @@ static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page) > return tlb_remove_page_size(tlb, page, PAGE_SIZE); > } > > -static inline void tlb_remove_ptdesc(struct mmu_gather *tlb, void *pt) > +static inline void tlb_remove_ptdesc(struct mmu_gather *tlb, struct ptdesc *pt) > { > tlb_remove_table(tlb, pt); > } Ah, make sense. I think this can be added to the patch #1. Thanks!
On Fri, Jan 24, 2025 at 12:47:59PM +0100, Peter Zijlstra wrote: > Right, so I don't think Sparc and Power care to use ptdesc, they're > using non page page-tables. i think you mean s390, not sparc. all architectures _use_ ptdescs, it's just that s390 and ppc use fractional ptdescs rather than an entire ptdesc for an individual page table. eventually we can change that, but we're looking out perhaps five years before we can allocate a ptdesc for a sub-PAGE_SIZE quantity.