From: Brendan Jackman <jackmanb@google.com>
To: Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
Peter Zijlstra <peterz@infradead.org>,
Andrew Morton <akpm@linux-foundation.org>,
David Hildenbrand <david@kernel.org>,
Vlastimil Babka <vbabka@kernel.org>,
Mike Rapoport <rppt@kernel.org>, Wei Xu <weixugc@google.com>,
Johannes Weiner <hannes@cmpxchg.org>, Zi Yan <ziy@nvidia.com>,
Lorenzo Stoakes <ljs@kernel.org>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, x86@kernel.org,
rppt@kernel.org, Sumit Garg <sumit.garg@oss.qualcomm.com>,
Will Deacon <will@kernel.org>,
rientjes@google.com, "Kalyazin, Nikita" <kalyazin@amazon.co.uk>,
patrick.roy@linux.dev, "Itazuri, Takahiro" <itazur@amazon.co.uk>,
Andy Lutomirski <luto@kernel.org>,
David Kaplan <david.kaplan@amd.com>,
Thomas Gleixner <tglx@kernel.org>, Yosry Ahmed <yosry@kernel.org>,
Patrick Bellasi <derkling@google.com>,
Reiji Watanabe <reijiw@google.com>,
Sean Christopherson <seanjc@google.com>,
Brendan Jackman <jackmanb@google.com>
Subject: [PATCH v3 14/26] mm: move migratetype definitions to freetype.h
Date: Sun, 26 Jul 2026 22:22:47 +0000 [thread overview]
Message-ID: <20260726-page_alloc-unmapped-v3-14-6f5729aa9832@google.com> (raw)
In-Reply-To: <20260726-page_alloc-unmapped-v3-0-6f5729aa9832@google.com>
Since migratetypes are a sub-element of freetype, move the pure
definitions into the new freetype.h.
This will enable referring to these raw types from pageblock-flags.h.
Acked-by: Vlastimil Babka (SUSE) <vbabka@kernel.org>
Signed-off-by: Brendan Jackman <jackmanb@google.com>
---
include/linux/freetype.h | 84 ++++++++++++++++++++++++++++++++++++++++++++++++
include/linux/mmzone.h | 73 -----------------------------------------
2 files changed, 84 insertions(+), 73 deletions(-)
diff --git a/include/linux/freetype.h b/include/linux/freetype.h
index b56a029de4ea4..b16dcd58e184c 100644
--- a/include/linux/freetype.h
+++ b/include/linux/freetype.h
@@ -3,6 +3,66 @@
#define _LINUX_FREETYPE_H
#include <linux/types.h>
+#include <linux/mmdebug.h>
+
+/*
+ * A migratetype is the part of a freetype that encodes the mobility
+ * requirements for the allocations the freelist is intended to serve.
+ *
+ * It's also currently overloaded to encode page isolation state.
+ */
+enum migratetype {
+ MIGRATE_UNMOVABLE,
+ MIGRATE_MOVABLE,
+ MIGRATE_RECLAIMABLE,
+ MIGRATE_PCPTYPES, /* the number of types on the pcp lists */
+ MIGRATE_HIGHATOMIC = MIGRATE_PCPTYPES,
+#ifdef CONFIG_CMA
+ /*
+ * MIGRATE_CMA migration type is designed to mimic the way
+ * ZONE_MOVABLE works. Only movable pages can be allocated
+ * from MIGRATE_CMA pageblocks and page allocator never
+ * implicitly change migration type of MIGRATE_CMA pageblock.
+ *
+ * The way to use it is to change migratetype of a range of
+ * pageblocks to MIGRATE_CMA which can be done by
+ * __free_pageblock_cma() function.
+ */
+ MIGRATE_CMA,
+ __MIGRATE_TYPE_END = MIGRATE_CMA,
+#else
+ __MIGRATE_TYPE_END = MIGRATE_HIGHATOMIC,
+#endif
+#ifdef CONFIG_MEMORY_ISOLATION
+ MIGRATE_ISOLATE, /* can't allocate from here */
+#endif
+ MIGRATE_TYPES
+};
+
+/* In mm/page_alloc.c; keep in sync also with show_migration_types() there */
+extern const char * const migratetype_names[MIGRATE_TYPES];
+
+#ifdef CONFIG_CMA
+# define is_migrate_cma(migratetype) unlikely((migratetype) == MIGRATE_CMA)
+#else
+# define is_migrate_cma(migratetype) false
+#endif
+
+static inline bool is_migrate_movable(int mt)
+{
+ return is_migrate_cma(mt) || mt == MIGRATE_MOVABLE;
+}
+
+/*
+ * Check whether a migratetype can be merged with another migratetype.
+ *
+ * It is only mergeable when it can fall back to other migratetypes for
+ * allocation. See fallbacks[MIGRATE_TYPES][3] in page_alloc.c.
+ */
+static inline bool migratetype_is_mergeable(int mt)
+{
+ return mt < MIGRATE_PCPTYPES;
+}
/*
* A freetype is the identifier for a page freelist. This consists of a
@@ -42,4 +102,28 @@ static inline bool freetypes_equal(freetype_t a, freetype_t b)
return a.migratetype == b.migratetype;
}
+static inline freetype_t migrate_to_freetype(enum migratetype mt,
+ unsigned int flags)
+{
+ freetype_t freetype;
+
+ /* No flags supported yet. */
+ VM_WARN_ON_ONCE(flags);
+
+ freetype.migratetype = mt;
+ return freetype;
+}
+
+static inline enum migratetype free_to_migratetype(freetype_t freetype)
+{
+ return freetype.migratetype;
+}
+
+/* Convenience helper, return the freetype modified to have the migratetype. */
+static inline freetype_t freetype_with_migrate(freetype_t freetype,
+ enum migratetype migratetype)
+{
+ return migrate_to_freetype(migratetype, freetype_flags(freetype));
+}
+
#endif /* _LINUX_FREETYPE_H */
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index 9fc77c4e70267..78455285dda7c 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -116,39 +116,7 @@
#define __NR_VMEMMAP_TAILS (MAX_FOLIO_ORDER - VMEMMAP_TAIL_MIN_ORDER + 1)
#define NR_VMEMMAP_TAILS (__NR_VMEMMAP_TAILS > 0 ? __NR_VMEMMAP_TAILS : 0)
-enum migratetype {
- MIGRATE_UNMOVABLE,
- MIGRATE_MOVABLE,
- MIGRATE_RECLAIMABLE,
- MIGRATE_PCPTYPES, /* the number of types on the pcp lists */
- MIGRATE_HIGHATOMIC = MIGRATE_PCPTYPES,
#ifdef CONFIG_CMA
- /*
- * MIGRATE_CMA migration type is designed to mimic the way
- * ZONE_MOVABLE works. Only movable pages can be allocated
- * from MIGRATE_CMA pageblocks and page allocator never
- * implicitly change migration type of MIGRATE_CMA pageblock.
- *
- * The way to use it is to change migratetype of a range of
- * pageblocks to MIGRATE_CMA which can be done by
- * __free_pageblock_cma() function.
- */
- MIGRATE_CMA,
- __MIGRATE_TYPE_END = MIGRATE_CMA,
-#else
- __MIGRATE_TYPE_END = MIGRATE_HIGHATOMIC,
-#endif
-#ifdef CONFIG_MEMORY_ISOLATION
- MIGRATE_ISOLATE, /* can't allocate from here */
-#endif
- MIGRATE_TYPES
-};
-
-/* In mm/page_alloc.c; keep in sync also with show_migration_types() there */
-extern const char * const migratetype_names[MIGRATE_TYPES];
-
-#ifdef CONFIG_CMA
-# define is_migrate_cma(migratetype) unlikely((migratetype) == MIGRATE_CMA)
# define is_migrate_cma_page(_page) (get_pageblock_migratetype(_page) == MIGRATE_CMA)
/*
* __dump_folio() in mm/debug.c passes a folio pointer to on-stack struct folio,
@@ -157,27 +125,10 @@ extern const char * const migratetype_names[MIGRATE_TYPES];
# define is_migrate_cma_folio(folio, pfn) \
(get_pfnblock_migratetype(&folio->page, pfn) == MIGRATE_CMA)
#else
-# define is_migrate_cma(migratetype) false
# define is_migrate_cma_page(_page) false
# define is_migrate_cma_folio(folio, pfn) false
#endif
-static inline bool is_migrate_movable(int mt)
-{
- return is_migrate_cma(mt) || mt == MIGRATE_MOVABLE;
-}
-
-/*
- * Check whether a migratetype can be merged with another migratetype.
- *
- * It is only mergeable when it can fall back to other migratetypes for
- * allocation. See fallbacks[MIGRATE_TYPES][3] in page_alloc.c.
- */
-static inline bool migratetype_is_mergeable(int mt)
-{
- return mt < MIGRATE_PCPTYPES;
-}
-
#define for_each_free_list(list, zone, order) \
for (order = 0; order < NR_PAGE_ORDERS; order++) \
for (unsigned int __idx = 0; \
@@ -185,30 +136,6 @@ static inline bool migratetype_is_mergeable(int mt)
(list = &(zone)->free_area[order].free_list[__idx], 1); \
__idx++)
-static inline freetype_t migrate_to_freetype(enum migratetype mt,
- unsigned int flags)
-{
- freetype_t freetype;
-
- /* No flags supported yet. */
- VM_WARN_ON_ONCE(flags);
-
- freetype.migratetype = mt;
- return freetype;
-}
-
-static inline enum migratetype free_to_migratetype(freetype_t freetype)
-{
- return freetype.migratetype;
-}
-
-/* Convenience helper, return the freetype modified to have the migratetype. */
-static inline freetype_t freetype_with_migrate(freetype_t freetype,
- enum migratetype migratetype)
-{
- return migrate_to_freetype(migratetype, freetype_flags(freetype));
-}
-
extern int page_group_by_mobility_disabled;
freetype_t get_pfnblock_freetype(const struct page *page, unsigned long pfn);
--
2.54.0
next prev parent reply other threads:[~2026-07-26 22:23 UTC|newest]
Thread overview: 120+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-26 22:22 [PATCH v3 00/26] mm: Add ALLOC_UNMAPPED and AS_NO_DIRECT_MAP Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 01/26] set_memory: add folio_{zap,restore}_direct_map helpers Brendan Jackman
2026-07-27 10:33 ` Mike Rapoport
2026-07-29 11:42 ` Brendan Jackman
2026-07-30 20:34 ` Yosry Ahmed
2026-07-31 5:21 ` Mike Rapoport
2026-07-31 11:57 ` Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 02/26] mm/secretmem: make use of folio_{zap,restore}_direct_map Brendan Jackman
2026-07-27 10:40 ` Mike Rapoport
2026-07-26 22:22 ` [PATCH v3 03/26] mm: introduce AS_NO_DIRECT_MAP Brendan Jackman
2026-07-30 21:06 ` Yosry Ahmed
2026-07-31 12:15 ` Brendan Jackman
2026-07-31 19:28 ` Yosry Ahmed
2026-08-07 0:02 ` Sean Christopherson
2026-08-07 0:13 ` Yosry Ahmed
2026-08-07 0:19 ` Sean Christopherson
2026-08-07 0:29 ` Yosry Ahmed
2026-08-07 14:26 ` Sean Christopherson
2026-08-07 18:12 ` Yosry Ahmed
2026-08-07 18:49 ` Sean Christopherson
2026-08-07 19:39 ` Yosry Ahmed
2026-08-07 22:44 ` Sean Christopherson
2026-08-07 22:48 ` Yosry Ahmed
2026-09-03 7:26 ` Takahiro Itazuri
2026-09-03 14:06 ` Yosry Ahmed
2026-09-03 14:25 ` Takahiro Itazuri
2026-09-15 16:01 ` Gregory Price
2026-10-05 20:11 ` Yosry Ahmed
2026-08-08 13:56 ` Brendan Jackman
2026-08-10 21:39 ` Yosry Ahmed
2026-08-10 21:46 ` Sean Christopherson
2026-08-13 15:32 ` Brendan Jackman
2026-08-13 17:25 ` Ackerley Tng
2026-08-18 0:32 ` Yosry Ahmed
2026-08-18 10:41 ` Brendan Jackman
2026-08-02 16:10 ` Mike Rapoport
2026-08-08 0:19 ` Yosry Ahmed
2026-07-26 22:22 ` [PATCH v3 04/26] x86/mm: split out preallocate_sub_pgd() Brendan Jackman
2026-07-31 22:10 ` Yosry Ahmed
2026-08-13 15:42 ` Brendan Jackman
2026-08-18 0:30 ` Yosry Ahmed
2026-08-02 16:13 ` Mike Rapoport
2026-08-13 15:46 ` Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 05/26] x86: move PAE PMD preallocation defines to header Brendan Jackman
2026-07-31 23:59 ` Yosry Ahmed
2026-08-13 15:49 ` Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 06/26] x86/tlb: Expose some flush function declarations to modules Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 07/26] x86/mm: introduce mm-local region Brendan Jackman
2026-08-02 16:27 ` Mike Rapoport
2026-08-13 16:10 ` Brendan Jackman
2026-08-03 22:29 ` Yosry Ahmed
2026-08-13 16:23 ` Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 08/26] x86/mm: move LDT remap into " Brendan Jackman
2026-08-03 22:33 ` Yosry Ahmed
2026-07-26 22:22 ` [PATCH v3 09/26] mm: Create flags arg for __apply_to_page_range() Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 10/26] mm: Add more flags " Brendan Jackman
2026-08-04 0:08 ` Yosry Ahmed
2026-08-13 16:40 ` Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 11/26] x86/mm: introduce the mermap Brendan Jackman
2026-08-02 16:40 ` Mike Rapoport
2026-08-13 16:44 ` Brendan Jackman
2026-08-04 18:38 ` Yosry Ahmed
2026-07-26 22:22 ` [PATCH v3 12/26] mm: KUnit tests for " Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 13/26] mm: introduce freetype_t Brendan Jackman
2026-08-04 22:23 ` Yosry Ahmed
2026-08-14 10:37 ` Brendan Jackman
2026-08-18 0:35 ` Yosry Ahmed
2026-09-03 8:00 ` Vlastimil Babka (SUSE)
2026-09-03 13:30 ` Yosry Ahmed
2026-08-04 23:02 ` Yosry Ahmed
2026-08-14 10:48 ` Brendan Jackman
2026-07-26 22:22 ` Brendan Jackman [this message]
2026-07-26 22:22 ` [PATCH v3 15/26] mm/page_alloc: add support for freetypes with no freelist Brendan Jackman
2026-07-31 14:13 ` Vlastimil Babka (SUSE)
2026-07-26 22:22 ` [PATCH v3 16/26] mm: add definitions for allocating unmapped pages Brendan Jackman
2026-08-04 19:53 ` Yosry Ahmed
2026-08-14 11:22 ` Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 17/26] mm: encode freetype flags in pageblock flags Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 18/26] mm/page_alloc: separate pcplists by freetype flags Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 19/26] mm/page_alloc: rename ALLOC_NON_BLOCK back to _HARDER Brendan Jackman
2026-07-31 14:52 ` Vlastimil Babka (SUSE)
2026-08-03 9:20 ` Vlastimil Babka (SUSE)
2026-08-04 21:50 ` Yosry Ahmed
2026-08-14 12:09 ` Brendan Jackman
2026-08-18 0:45 ` Yosry Ahmed
2026-08-18 10:58 ` Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 20/26] mm/page_alloc: introduce ALLOC_NOBLOCK Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 21/26] mm/page_alloc: implement FREETYPE_UNMAPPED allocations Brendan Jackman
2026-08-03 9:18 ` Vlastimil Babka (SUSE)
2026-08-15 14:12 ` Brendan Jackman
2026-08-04 23:41 ` Yosry Ahmed
2026-08-07 0:05 ` Yosry Ahmed
2026-08-14 12:31 ` Brendan Jackman
2026-08-04 23:53 ` Yosry Ahmed
2026-08-05 16:13 ` Yosry Ahmed
2026-08-15 14:28 ` Brendan Jackman
2026-08-18 0:55 ` Yosry Ahmed
2026-08-18 11:03 ` Brendan Jackman
2026-08-18 17:51 ` Yosry Ahmed
2026-08-25 20:01 ` Yosry Ahmed
2026-08-07 0:16 ` Yosry Ahmed
2026-08-15 14:30 ` Brendan Jackman
2026-08-18 0:50 ` Yosry Ahmed
2026-08-12 21:26 ` Yosry Ahmed
2026-08-15 14:43 ` Brendan Jackman
2026-08-18 0:49 ` Yosry Ahmed
2026-08-18 1:01 ` Yosry Ahmed
2026-07-26 22:22 ` [PATCH v3 22/26] mm: Minimal KUnit tests for some new page_alloc logic Brendan Jackman
2026-08-03 9:30 ` Vlastimil Babka (SUSE)
2026-07-26 22:22 ` [PATCH v3 23/26] mm: Split out NR_FREE_PAGES_BLOCKS_[UN]MAPPED Brendan Jackman
2026-08-03 9:32 ` Vlastimil Babka (SUSE)
2026-07-26 22:22 ` [PATCH v3 24/26] mm/page_alloc: always direct compact for unmapped allocs Brendan Jackman
2026-08-03 9:44 ` Vlastimil Babka (SUSE)
2026-08-15 14:44 ` Brendan Jackman
2026-08-06 23:29 ` Yosry Ahmed
2026-07-26 22:22 ` [PATCH v3 25/26] mm: plumb alloc flags into some alloc funcs Brendan Jackman
2026-08-03 9:52 ` Vlastimil Babka (SUSE)
2026-07-26 22:22 ` [PATCH v3 26/26] mm: add fast path for AS_NO_DIRECT_MAP Brendan Jackman
2026-08-08 0:06 ` Yosry Ahmed
2026-07-29 11:52 ` [PATCH v3 00/26] mm: Add ALLOC_UNMAPPED and AS_NO_DIRECT_MAP Brendan Jackman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260726-page_alloc-unmapped-v3-14-6f5729aa9832@google.com \
--to=jackmanb@google.com \
--cc=akpm@linux-foundation.org \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=david.kaplan@amd.com \
--cc=david@kernel.org \
--cc=derkling@google.com \
--cc=hannes@cmpxchg.org \
--cc=itazur@amazon.co.uk \
--cc=kalyazin@amazon.co.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=luto@kernel.org \
--cc=patrick.roy@linux.dev \
--cc=peterz@infradead.org \
--cc=reijiw@google.com \
--cc=rientjes@google.com \
--cc=rppt@kernel.org \
--cc=seanjc@google.com \
--cc=sumit.garg@oss.qualcomm.com \
--cc=tglx@kernel.org \
--cc=vbabka@kernel.org \
--cc=weixugc@google.com \
--cc=will@kernel.org \
--cc=x86@kernel.org \
--cc=yosry@kernel.org \
--cc=ziy@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®