pgtable: create struct ptdesc
Currently, page table information is stored within struct page. As part of simplifying struct page, create struct ptdesc for page table information. Link: https://lkml.kernel.org/r/20230807230513.102486-3-vishal.moola@gmail.com Signed-off-by: Vishal Moola (Oracle) <vishal.moola@gmail.com> Acked-by: Mike Rapoport (IBM) <rppt@kernel.org> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Christophe Leroy <christophe.leroy@csgroup.eu> Cc: Claudio Imbrenda <imbrenda@linux.ibm.com> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: David Hildenbrand <david@redhat.com> Cc: "David S. Miller" <davem@davemloft.net> Cc: Dinh Nguyen <dinguyen@kernel.org> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Geert Uytterhoeven <geert+renesas@glider.be> Cc: Guo Ren <guoren@kernel.org> Cc: Huacai Chen <chenhuacai@kernel.org> Cc: Hugh Dickins <hughd@google.com> Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> Cc: Jonas Bonn <jonas@southpole.se> Cc: Matthew Wilcox <willy@infradead.org> Cc: Palmer Dabbelt <palmer@rivosinc.com> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Richard Weinberger <richard@nod.at> Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
f7bda0d85d
commit
9a35de4ffc
@ -397,6 +397,76 @@ FOLIO_MATCH(flags, _flags_2);
|
||||
FOLIO_MATCH(compound_head, _head_2);
|
||||
#undef FOLIO_MATCH
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* @__page_mapping: Aliases with page->mapping. Unused for page tables.
|
||||
* @pt_mm: Used for x86 pgds.
|
||||
* @pt_frag_refcount: For fragmented page table tracking. Powerpc and s390 only.
|
||||
* @_pt_pad_2: Padding to ensure proper alignment.
|
||||
* @ptl: Lock for the page table.
|
||||
* @__page_type: Same as page->page_type. Unused for page tables.
|
||||
* @_refcount: Same as page refcount. Used for s390 page tables.
|
||||
* @pt_memcg_data: Memcg data. Tracked for page tables here.
|
||||
*
|
||||
* This struct overlays struct page for now. Do not modify without a good
|
||||
* understanding of the issues.
|
||||
*/
|
||||
struct ptdesc {
|
||||
unsigned long __page_flags;
|
||||
|
||||
union {
|
||||
struct rcu_head pt_rcu_head;
|
||||
struct list_head pt_list;
|
||||
struct {
|
||||
unsigned long _pt_pad_1;
|
||||
pgtable_t pmd_huge_pte;
|
||||
};
|
||||
};
|
||||
unsigned long __page_mapping;
|
||||
|
||||
union {
|
||||
struct mm_struct *pt_mm;
|
||||
atomic_t pt_frag_refcount;
|
||||
};
|
||||
|
||||
union {
|
||||
unsigned long _pt_pad_2;
|
||||
#if ALLOC_SPLIT_PTLOCKS
|
||||
spinlock_t *ptl;
|
||||
#else
|
||||
spinlock_t ptl;
|
||||
#endif
|
||||
};
|
||||
unsigned int __page_type;
|
||||
atomic_t _refcount;
|
||||
#ifdef CONFIG_MEMCG
|
||||
unsigned long pt_memcg_data;
|
||||
#endif
|
||||
};
|
||||
|
||||
#define TABLE_MATCH(pg, pt) \
|
||||
static_assert(offsetof(struct page, pg) == offsetof(struct ptdesc, pt))
|
||||
TABLE_MATCH(flags, __page_flags);
|
||||
TABLE_MATCH(compound_head, pt_list);
|
||||
TABLE_MATCH(compound_head, _pt_pad_1);
|
||||
TABLE_MATCH(pmd_huge_pte, pmd_huge_pte);
|
||||
TABLE_MATCH(mapping, __page_mapping);
|
||||
TABLE_MATCH(pt_mm, pt_mm);
|
||||
TABLE_MATCH(ptl, ptl);
|
||||
TABLE_MATCH(rcu_head, pt_rcu_head);
|
||||
TABLE_MATCH(page_type, __page_type);
|
||||
TABLE_MATCH(_refcount, _refcount);
|
||||
#ifdef CONFIG_MEMCG
|
||||
TABLE_MATCH(memcg_data, pt_memcg_data);
|
||||
#endif
|
||||
#undef TABLE_MATCH
|
||||
static_assert(sizeof(struct ptdesc) <= sizeof(struct page));
|
||||
|
||||
/*
|
||||
* Used for sizing the vmemmap region on some architectures
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user