Add and use memdesc_flags_t
From: | "Matthew Wilcox (Oracle)" <willy-AT-infradead.org> | |
To: | Andrew Morton <akpm-AT-linux-foundation.org> | |
Subject: | [PATCH 00/11] Add and use memdesc_flags_t | |
Date: | Tue, 05 Aug 2025 18:22:50 +0100 | |
Message-ID: | <20250805172307.1302730-1-willy@infradead.org> | |
Cc: | "Matthew Wilcox (Oracle)" <willy-AT-infradead.org>, linux-mm-AT-kvack.org | |
Archive-link: | Article |
At some point struct page will be separated from struct slab and struct folio. This is a step towards that by introducing a type for the 'flags' word of all three structures. This gives us a certain amount of type safety by establishing that some of these unsigned longs are different from other unsigned longs in that they contain things like node ID, section number and zone number in the upper bits. That lets us have functions that can be easily called by anyone who has a slab, folio or page (but not easily by anyone else) to get the node or zone. There's going to be some unusual merge problems with this as some odd bits of the kernel decide they want to print out the flags value or something similar by writing page->flags and now they'll need to write page->flags.f instead. That's most of the churn here. Maybe we should be removing these things from the debug output? The build bots have had since Friday to chew on this as I pushed it to git://git.infradead.org/users/willy/pagecache.git folio-page-split Matthew Wilcox (Oracle) (11): mm: Introduce memdesc_flags_t mm: Convert page_to_section() to memdesc_section() mm: Introduce memdesc_nid() mm: Introduce memdesc_zonenum() slab: Use memdesc_flags_t slab: Use memdesc_nid() mm: Introduce memdesc_is_zone_device() mm: Reimplement folio_is_device_private() mm: Reimplement folio_is_device_coherent() mm: Reimplement folio_is_fsdax() mm: Add folio_is_pci_p2pdma() arch/x86/mm/pat/memtype.c | 6 ++-- fs/fuse/dev.c | 2 +- fs/gfs2/glops.c | 2 +- fs/jffs2/file.c | 4 +-- fs/nilfs2/page.c | 2 +- fs/proc/page.c | 4 +-- fs/ubifs/file.c | 6 ++-- include/asm-generic/memory_model.h | 2 +- include/linux/memremap.h | 39 +++++++++++++--------- include/linux/mm.h | 53 ++++++++++++++++-------------- include/linux/mm_inline.h | 12 +++---- include/linux/mm_types.h | 8 +++-- include/linux/mmzone.h | 30 +++++++++++------ include/linux/page-flags.h | 40 +++++++++++----------- include/linux/pgalloc_tag.h | 7 ++-- include/trace/events/page_ref.h | 4 +-- mm/filemap.c | 8 ++--- mm/gup.c | 2 +- mm/huge_memory.c | 4 +-- mm/memory-failure.c | 12 +++---- mm/mmzone.c | 4 +-- mm/page_alloc.c | 12 +++---- mm/slab.h | 6 ++-- mm/slub.c | 18 +++++----- mm/sparse.c | 6 ++-- mm/swap.c | 8 ++--- mm/vmscan.c | 18 +++++----- mm/workingset.c | 2 +- 28 files changed, 174 insertions(+), 147 deletions(-) -- 2.47.2