|
|
Subscribe / Log in / New account

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




Copyright © 2025, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds