On Tue, Jun 27, 2023 at 9:07 AM Peter Xu <peterx@xxxxxxxxxx> wrote: > > On Mon, Jun 26, 2023 at 08:14:01PM -0700, Vishal Moola (Oracle) wrote: > > Currently, page table information is stored within struct page. As part > > of simplifying struct page, create struct ptdesc for page table > > information. > > > > Signed-off-by: Vishal Moola (Oracle) <vishal.moola@xxxxxxxxx> > > Acked-by: Mike Rapoport (IBM) <rppt@xxxxxxxxxx> > > --- > > include/linux/pgtable.h | 68 +++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 68 insertions(+) > > > > diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h > > index 5063b482e34f..d46cb709ce08 100644 > > --- a/include/linux/pgtable.h > > +++ b/include/linux/pgtable.h > > @@ -987,6 +987,74 @@ static inline void ptep_modify_prot_commit(struct vm_area_struct *vma, > > #endif /* __HAVE_ARCH_PTEP_MODIFY_PROT_TRANSACTION */ > > #endif /* CONFIG_MMU */ > > > > + > > +/** > > + * struct ptdesc - Memory descriptor for page tables. > > + * @__page_flags: Same as page flags. Unused for page tables. > > + * @pt_rcu_head: For freeing page table pages. > > + * @pt_list: List of used page tables. Used for s390 and x86. > > + * @_pt_pad_1: Padding that aliases with page's compound head. > > + * @pmd_huge_pte: Protected by ptdesc->ptl, used for THPs. > > + * @_pt_s390_gaddr: Aliases with page's mapping. Used for s390 gmap only. > > Should some arch-specific bits (and a few others) always under some > #ifdefs, so it shouldn't appear on other archs? Right now this struct completely overlays struct page, so the padding as well as any arch-specific fields have to stay. Whenever we get ptdescs independent of struct page we can cleanup any unnecessary fields, as well as omit unnecessary fields from unrelated architectures.