From: Richard Cheng <icheng@nvidia.com>
To: Gregory Price <gourry@gourry.net>
Cc: linux-mm@kvack.org, Zhigang.Luo@amd.com, arun.george@samsung.com,
balbirs@nvidia.com, brendan.jackman@linux.dev,
yuzenghui@huawei.com, apopple@nvidia.com, alucerop@amd.com,
matthew.brost@intel.com, akpm@linux-foundation.org,
david@kernel.org, ljs@kernel.org, liam@infradead.org,
vbabka@kernel.org, rppt@kernel.org, surenb@google.com,
mhocko@suse.com, corbet@lwn.net, skhan@linuxfoundation.org,
gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org,
djbw@kernel.org, vishal.l.verma@intel.com, dave.jiang@intel.com,
alison.schofield@intel.com, osandov@osandov.com,
jannh@google.com, pfalcato@suse.de, jackmanb@google.com,
hannes@cmpxchg.org, ziy@nvidia.com, pbonzini@redhat.com,
osalvador@suse.de, joshua.hahnjy@gmail.com, rakie.kim@sk.com,
byungchul@sk.com, ying.huang@linux.alibaba.com,
kasong@tencent.com, qi.zheng@linux.dev, shakeel.butt@linux.dev,
baohua@kernel.org, axelrasmussen@google.com, yuanchu@google.com,
weixugc@google.com, yury.norov@gmail.com,
linux@rasmusvillemoes.dk, longman@redhat.com,
ridong.chen@linux.dev, tj@kernel.org, mkoutny@suse.com,
sj@kernel.org, jgg@ziepe.ca, jhubbard@nvidia.com,
peterx@redhat.com, baolin.wang@linux.alibaba.com,
npache@redhat.com, ryan.roberts@arm.com, dev.jain@arm.com,
lance.yang@linux.dev, usama.arif@linux.dev, xu.xin16@zte.com.cn,
chengming.zhou@linux.dev, roman.gushchin@linux.dev,
muchun.song@linux.dev, linux-kernel@vger.kernel.org,
linux-doc@vger.kernel.org, driver-core@lists.linux.dev,
nvdimm@lists.linux.dev, linux-cxl@vger.kernel.org,
linux-debuggers@vger.kernel.org, linux-fsdevel@vger.kernel.org,
kvm@vger.kernel.org, cgroups@vger.kernel.org,
damon@lists.linux.dev, linux-kselftest@vger.kernel.org,
kernel-team@meta.com
Subject: Re: [PATCH v5 05/36] mm: add ZONELIST_PRIVATE(_NOFALLBACK) for N_MEMORY_PRIVATE nodes.
Date: Wed, 22 Jul 2026 21:00:51 +0800 [thread overview]
Message-ID: <amC-b5SIkxUCKQ7H@MWDK4CY14F> (raw)
In-Reply-To: <20260720193431.3841992-6-gourry@gourry.net>
On Mon, Jul 20, 2026 at 03:33:59PM +0800, Gregory Price wrote:
> N_MEMORY_PRIVATE nodes must be invisible to ordinary allocation,
> no allocations may reach one unless explicitly called for.
>
> Make this isolation structural in the zonelists: N_MEMORY_PRIVATE
> nodes are excluded from FALLBACK and NOFALLBACK entirely, making
> them effectively invisible to all normal callers of page_alloc.
>
> Add ZONELIST_PRIVATE, which spans (N_MEMORY | N_MEMORY_PRIVATE).
> When !CONFIG_NUMA, it aliases ZONELIST_FALLBACK and compiles out.
>
> Add ZONELIST_PRIVATE_NOFALLBACK as the __GFP_THISNODE target for
> private node allocations.
>
> Zonelist selection rides the allocator's alloc_flags. Add
> ALLOC_ZONELIST_PRIVATE and resolve it in select_zonelist(), which
> prepare_alloc_pages() applies from ac->alloc_flags; the default
> (ALLOC_DEFAULT) keeps node_zonelist()'s gfp-based selection.
>
> Add explicit private-node alloc() functions to prevent open-coding
> (both ride ALLOC_ZONELIST_PRIVATE through the alloc_flags-carrying
> entry points):
> - alloc_pages_node_private_noprof()
> - folio_alloc_node_private_noprof()
>
> alloc_contig_range adds an explicit node_is_private() guard because
> it dervices its target zones from PFNs rather than zonelists. All
> in-tree callers use N_MEMORY ranges, but the check prevents future
> callers from violating node isolation.
>
> Important note: By design this zonelist isolates N_MEMORY_PRIVATE
> from unintentional allocations, but does NOT isolate private-node
> allocations from falling back to non-private nodes.
>
> Signed-off-by: Gregory Price <gourry@gourry.net>
> ---
> include/linux/gfp.h | 11 ++++++++
> include/linux/mmzone.h | 11 +++++++-
> mm/mm_init.c | 2 +-
> mm/page_alloc.c | 64 ++++++++++++++++++++++++++++++++++++++++--
> mm/page_alloc.h | 26 +++++++++++++++++
> 5 files changed, 109 insertions(+), 5 deletions(-)
>
> diff --git a/include/linux/gfp.h b/include/linux/gfp.h
> index a327e58c313f8..f3e867de744f6 100644
> --- a/include/linux/gfp.h
> +++ b/include/linux/gfp.h
> @@ -204,6 +204,17 @@ static inline void arch_free_page(struct page *page, int order) { }
> static inline void arch_alloc_page(struct page *page, int order) { }
> #endif
>
> +/* Allocate from an N_MEMORY_PRIVATE node (selects the private zonelist). */
> +struct page *alloc_pages_node_private_noprof(gfp_t gfp, unsigned int order,
> + int nid);
> +#define alloc_pages_node_private(...) \
> + alloc_hooks(alloc_pages_node_private_noprof(__VA_ARGS__))
> +
> +struct folio *folio_alloc_node_private_noprof(gfp_t gfp, unsigned int order,
> + int nid);
> +#define folio_alloc_node_private(...) \
> + alloc_hooks(folio_alloc_node_private_noprof(__VA_ARGS__))
> +
> unsigned long alloc_pages_bulk_noprof(gfp_t gfp, int preferred_nid,
> nodemask_t *nodemask, int nr_pages,
> struct page **page_array);
> diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
> index 9815e48c03b97..654c5111f7cec 100644
> --- a/include/linux/mmzone.h
> +++ b/include/linux/mmzone.h
> @@ -1392,13 +1392,22 @@ enum {
> #ifdef CONFIG_NUMA
> /*
> * The NUMA zonelists are doubled because we need zonelists that
> - * restrict the allocations to a single node for __GFP_THISNODE.
> + * restrict the allocations to a single node for __GFP_THISNODE
> + * and N_MEMORY_PRIVATE nodes (isolated from default lists).
> */
> ZONELIST_NOFALLBACK, /* zonelist without fallback (__GFP_THISNODE) */
> + ZONELIST_PRIVATE, /* N_MEMORY_PRIVATE access, falls back to DRAM */
> + ZONELIST_PRIVATE_NOFALLBACK, /* N_MEMORY_PRIVATE access, __GFP_THISNODE */
> #endif
> MAX_ZONELISTS
> };
>
> +#ifndef CONFIG_NUMA
> +/* Without NUMA only ZONELIST_FALLBACK exists so everything collapses there */
> +#define ZONELIST_PRIVATE ZONELIST_FALLBACK
> +#define ZONELIST_PRIVATE_NOFALLBACK ZONELIST_FALLBACK
> +#endif
> +
> /*
> * This struct contains information about a zone in a zonelist. It is stored
> * here to avoid dereferences into large structures and lookups of tables
> diff --git a/mm/mm_init.c b/mm/mm_init.c
> index 711f821f7b3c7..adb50647d29ca 100644
> --- a/mm/mm_init.c
> +++ b/mm/mm_init.c
> @@ -2701,7 +2701,7 @@ void __init mm_core_init(void)
> init_zero_page_pfn();
>
> /* Initializations relying on SMP setup */
> - BUILD_BUG_ON(MAX_ZONELISTS > 2);
> + BUILD_BUG_ON(MAX_ZONELISTS > 4);
> build_all_zonelists(NULL);
> page_alloc_init_cpuhp();
> alloc_tag_sec_init();
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index aa35bbe5d4c3e..78755a55b1540 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -5040,7 +5040,7 @@ static inline bool prepare_alloc_pages(gfp_t gfp_mask, unsigned int order,
> unsigned int *alloc_flags)
> {
> ac->highest_zoneidx = gfp_zone(gfp_mask);
> - ac->zonelist = node_zonelist(preferred_nid, gfp_mask);
> + ac->zonelist = select_zonelist(preferred_nid, gfp_mask, ac->alloc_flags);
> ac->nodemask = nodemask;
> ac->migratetype = gfp_migratetype(gfp_mask);
>
> @@ -5346,7 +5346,7 @@ struct page *__alloc_frozen_pages_noprof(gfp_t gfp, unsigned int order,
> unsigned int fastpath_alloc_flags = alloc_flags;
>
> /* Other flags could be supported later if needed. */
> - if (WARN_ON(alloc_flags & ~(ALLOC_NOLOCK | ALLOC_NO_CODETAG)))
> + if (WARN_ON(alloc_flags & ~(ALLOC_NOLOCK | ALLOC_NO_CODETAG | ALLOC_ZONELIST_PRIVATE)))
> return NULL;
>
> if (!alloc_order_allowed(gfp, order, alloc_flags))
> @@ -5457,6 +5457,22 @@ struct folio *__folio_alloc_node_noprof(gfp_t gfp, unsigned int order, int nid)
> }
> EXPORT_SYMBOL(__folio_alloc_node_noprof);
>
> +struct page *alloc_pages_node_private_noprof(gfp_t gfp, unsigned int order,
> + int nid)
> +{
> + return __alloc_pages_noprof(gfp, order, nid, NULL,
> + ALLOC_ZONELIST_PRIVATE);
> +}
> +EXPORT_SYMBOL_GPL(alloc_pages_node_private_noprof);
> +
> +struct folio *folio_alloc_node_private_noprof(gfp_t gfp, unsigned int order,
> + int nid)
> +{
> + return __folio_alloc_noprof(gfp, order, nid, NULL,
> + ALLOC_ZONELIST_PRIVATE);
> +}
> +EXPORT_SYMBOL_GPL(folio_alloc_node_private_noprof);
> +
> /*
> * Common helper functions. Never use with __GFP_HIGHMEM because the returned
> * address cannot represent highmem pages. Use alloc_pages and then kmap if
> @@ -5854,9 +5870,21 @@ static void build_zonelists_in_node_order(pg_data_t *pgdat, int *node_order,
> static void build_thisnode_zonelists(pg_data_t *pgdat)
> {
> struct zoneref *zonerefs;
> - int nr_zones;
> + int nr_zones = 0;
>
> + /*
> + * NOFALLBACK: the node's own zones. EMPTY for private nodes so a
> + * stray __GFP_THISNODE allocation can't violate isolation.
> + */
> zonerefs = pgdat->node_zonelists[ZONELIST_NOFALLBACK]._zonerefs;
> + if (!node_is_private(pgdat->node_id))
> + nr_zones = build_zonerefs_node(pgdat, zonerefs);
> + zonerefs += nr_zones;
> + zonerefs->zone = NULL;
> + zonerefs->zone_idx = 0;
> +
> + /* PRIVATE_NOFALLBACK: the node's own zones, private nodes included. */
> + zonerefs = pgdat->node_zonelists[ZONELIST_PRIVATE_NOFALLBACK]._zonerefs;
> nr_zones = build_zonerefs_node(pgdat, zonerefs);
> zonerefs += nr_zones;
> zonerefs->zone = NULL;
> @@ -5899,11 +5927,28 @@ static void build_node_zonelist(pg_data_t *pgdat, const nodemask_t *candidates,
> static void build_zonelists(pg_data_t *pgdat)
> {
> static int node_order[MAX_NUMNODES];
> + nodemask_t tier_nodes;
> int local_node = pgdat->node_id;
> int node, nr_nodes = 0;
>
> memset(node_order, 0, sizeof(node_order));
>
> + /*
> + * Zonelists: FALLBACK, NOFALLBACK, PRIVATE
> + *
> + * FALLBACK: Allocation order for all nodes. Private nodes have lists
> + * but never appear as an entry in any list. Allocations
> + * targeting a private node w/ FALLBACK land on N_MEMORY.
> + *
> + * NOFALLBACK: A list for each node containing only itself.
> + * Allocations targeting a private node w/ NOFALLBACK
> + * will always fail (their NOFALLBACK is empty)
> + *
> + * PRIVATE: (N_MEMORY | N_MEMORY_PRIVATE) - allows access to
> + * private nodes, and falls back to normal memory unless
> + * __GFP_THISNODE otherwise constrains it.
> + */
> +
> build_node_zonelist(pgdat, &node_states[N_MEMORY], ZONELIST_FALLBACK,
> true, node_order, &nr_nodes);
> build_thisnode_zonelists(pgdat);
> @@ -5912,6 +5957,10 @@ static void build_zonelists(pg_data_t *pgdat)
> for (node = 0; node < nr_nodes; node++)
> pr_cont("%d ", node_order[node]);
> pr_cont("\n");
> +
> + nodes_or(tier_nodes, node_states[N_MEMORY], node_states[N_MEMORY_PRIVATE]);
Hi Gregory,
A question about this part, if my understanding is right,
ZONELIST_PRIVATE contains all private nodes, should we use some explicit target
nodemask here to make sure only the targeting owner's private node can be touched?
Otherwise it might fall back into a different owner's private node.
--Richard
> + build_node_zonelist(pgdat, &tier_nodes, ZONELIST_PRIVATE, false,
> + node_order, &nr_nodes);
> }
>
> #ifdef CONFIG_HAVE_MEMORYLESS_NODES
> @@ -7282,6 +7331,15 @@ int alloc_contig_frozen_range_noprof(unsigned long start, unsigned long end,
> if (__alloc_contig_verify_gfp_mask(gfp_mask, (gfp_t *)&cc.gfp_mask))
> return -EINVAL;
>
> + /*
> + * Private nodes are kept unreachable via the zonelists, but
> + * alloc_contig works directly on a zone derived from the caller's
> + * pfn range, bypassing that. Reject this operation explicitly
> + * rather than silently carving memory out of an isolated node.
> + */
> + if (unlikely(node_is_private(zone_to_nid(cc.zone))))
> + return -EBUSY;
> +
> /*
> * What we do here is we mark all pageblocks in range as
> * MIGRATE_ISOLATE. Because pageblock and max order pages may
> diff --git a/mm/page_alloc.h b/mm/page_alloc.h
> index 23fc79ce97b60..741448d83ce77 100644
> --- a/mm/page_alloc.h
> +++ b/mm/page_alloc.h
> @@ -57,6 +57,9 @@
> */
> #define ALLOC_NO_CODETAG 0x1000
>
> +/* Select the N_MEMORY_PRIVATE zonelist family (see select_zonelist()). */
> +#define ALLOC_ZONELIST_PRIVATE 0x2000
> +
> /* Flags that allow allocations below the min watermark. */
> #define ALLOC_RESERVES (ALLOC_NON_BLOCK|ALLOC_MIN_RESERVE|ALLOC_HIGHATOMIC|ALLOC_OOM)
>
> @@ -95,6 +98,29 @@ struct alloc_context {
> unsigned int alloc_flags;
> };
>
> +#ifdef CONFIG_NUMA
> +static_assert(ZONELIST_PRIVATE + 1 == ZONELIST_PRIVATE_NOFALLBACK);
> +#endif
> +
> +/*
> + * select_zonelist - resolve the zonelist for an allocation
> + *
> + * The default matches node_zonelist(); ALLOC_ZONELIST_PRIVATE selects the
> + * private-node family so an allocation may reach an N_MEMORY_PRIVATE node.
> + */
> +static inline struct zonelist *
> +select_zonelist(int nid, gfp_t gfp, unsigned int alloc_flags)
> +{
> +#ifdef CONFIG_NUMA
> + if (alloc_flags & ALLOC_ZONELIST_PRIVATE) {
> + int idx = ZONELIST_PRIVATE + !!(gfp & __GFP_THISNODE);
> +
> + return &NODE_DATA(nid)->node_zonelists[idx];
> + }
> +#endif
> + return node_zonelist(nid, gfp);
> +}
> +
> /*
> * This function returns the order of a free page in the buddy system. In
> * general, page_zone(page)->lock must be held by the caller to prevent the
> --
> 2.53.0-Meta
>
>
next prev parent reply other threads:[~2026-07-22 13:01 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-20 19:33 [PATCH v5 00/36] Private Memory NUMA Nodes Gregory Price
2026-07-20 19:33 ` [PATCH v5 01/36] mm: refactor find_next_best_node to find_next_best_node_in Gregory Price
2026-07-21 5:46 ` Balbir Singh
2026-07-20 19:33 ` [PATCH v5 02/36] mm/page_alloc: refactor build_node_zonelist() out of build_zonelists() Gregory Price
2026-07-20 19:33 ` [PATCH v5 03/36] mm/page_alloc: let the bulk and folio allocators carry alloc_flags Gregory Price
2026-07-20 19:33 ` [PATCH v5 04/36] numa: introduce N_MEMORY_PRIVATE Gregory Price
2026-07-20 19:33 ` [PATCH v5 05/36] mm: add ZONELIST_PRIVATE(_NOFALLBACK) for N_MEMORY_PRIVATE nodes Gregory Price
2026-07-22 13:00 ` Richard Cheng [this message]
2026-07-22 13:19 ` Gregory Price
2026-07-20 19:34 ` [PATCH v5 06/36] cpuset: exclude private nodes from cpuset.mems (default-open) Gregory Price
2026-07-20 19:34 ` [PATCH v5 07/36] mm/memory_hotplug: disallow migration-driven private node hotunplug Gregory Price
2026-07-20 19:34 ` [PATCH v5 08/36] mm/mempolicy: skip private node folios when queueing for migration Gregory Price
2026-07-20 19:34 ` [PATCH v5 09/36] mm/migrate: disallow userland driven migration for private nodes Gregory Price
2026-07-20 19:34 ` [PATCH v5 10/36] mm/madvise: disallow madvise operations on private node folios Gregory Price
2026-07-20 19:34 ` [PATCH v5 11/36] mm/compaction: disallow compaction on private nodes Gregory Price
2026-07-20 19:34 ` [PATCH v5 12/36] mm/page_alloc: clear private node watermarks and system reserves Gregory Price
2026-07-20 19:34 ` [PATCH v5 13/36] mm/mempolicy: disallow NUMA Balancing prot_none on private nodes Gregory Price
2026-07-20 19:34 ` [PATCH v5 14/36] mm/damon: skip private node memory in DAMON migration and pageout Gregory Price
2026-07-21 23:46 ` SJ Park
2026-07-22 12:16 ` Gregory Price
2026-07-20 19:34 ` [PATCH v5 15/36] mm/ksm: skip KSM for managed-memory folios Gregory Price
2026-07-20 19:34 ` [PATCH v5 16/36] mm/khugepaged: skip private node folios when trying to collapse Gregory Price
2026-07-20 19:34 ` [PATCH v5 17/36] mm/vmscan: disallow reclaim of private node memory Gregory Price
2026-07-20 19:34 ` [PATCH v5 18/36] mm/gup: disallow longterm pin of private node folios Gregory Price
2026-07-20 19:34 ` [PATCH v5 19/36] proc: include N_MEMORY_PRIVATE nodes in numa_maps output Gregory Price
2026-07-20 19:34 ` [PATCH v5 20/36] mm/memcontrol: account private-node memory in per-node stats Gregory Price
2026-07-20 19:34 ` [PATCH v5 21/36] proc/kcore: include private-node RAM in the kcore RAM map Gregory Price
2026-07-20 20:05 ` Omar Sandoval
2026-07-20 19:34 ` [PATCH v5 22/36] mm/mempolicy: add MPOL_F_PRIVATE and zonelist selection Gregory Price
2026-07-20 19:34 ` [PATCH v5 23/36] mm/mempolicy: apply policy at the kernel zone for private-node binds Gregory Price
2026-07-20 19:34 ` [PATCH v5 24/36] mm/mempolicy: add in-kernel MPOL_BIND interfaces for drivers/services Gregory Price
2026-07-20 19:34 ` [PATCH v5 25/36] mm/memory_hotplug: support N_MEMORY_PRIVATE node hotplug Gregory Price
2026-07-20 19:34 ` [PATCH v5 26/36] mm: add NODE_PRIVATE_CAP_RECLAIM for opted-in private node reclaim Gregory Price
2026-07-22 13:36 ` Richard Cheng
2026-07-22 13:48 ` Gregory Price
2026-07-20 19:34 ` [PATCH v5 27/36] mm: add NODE_PRIVATE_CAP_USER_NUMA for userland numa controls Gregory Price
2026-07-20 19:34 ` [PATCH v5 28/36] mm: add NODE_PRIVATE_CAP_HOTUNPLUG for opted-in private nodes Gregory Price
2026-07-22 14:04 ` Gregory Price
2026-07-20 19:34 ` [PATCH v5 29/36] mm: add NODE_PRIVATE_CAP_DEMOTION for private-node tiering demotion Gregory Price
2026-07-20 19:34 ` [PATCH v5 30/36] mm: add NODE_PRIVATE_CAP_NUMA_BALANCING for private-node NUMA balancing Gregory Price
2026-07-20 19:34 ` [PATCH v5 31/36] mm: add NODE_PRIVATE_CAP_LTPIN for private node folio pinning Gregory Price
2026-07-20 19:34 ` [PATCH v5 32/36] mm/khugepaged: base private node collapse eligiblity on actor/cap bits Gregory Price
2026-07-22 13:24 ` Richard Cheng
2026-07-22 13:43 ` Gregory Price
2026-07-20 19:34 ` [PATCH v5 33/36] Documentation/mm: describe private (N_MEMORY_PRIVATE) memory nodes Gregory Price
2026-07-20 19:34 ` [PATCH v5 34/36] mm/mempolicy: add mpol_set_shared_policy_range() Gregory Price
2026-07-20 19:34 ` [PATCH v5 35/36] KVM: guest_memfd: bind backing memory to a NUMA node at creation Gregory Price
2026-07-21 3:46 ` [PATCH v5 00/36] Private Memory NUMA Nodes Balbir Singh
2026-07-21 18:16 ` Gregory Price
2026-07-22 8:29 ` Balbir Singh
2026-07-22 12:28 ` Gregory Price
2026-07-21 13:26 ` Zenghui Yu
2026-07-21 17:18 ` Gregory Price
2026-07-22 14:20 ` Richard Cheng
2026-07-22 15:40 ` Gregory Price
2026-07-22 20:56 ` Gregory Price
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=amC-b5SIkxUCKQ7H@MWDK4CY14F \
--to=icheng@nvidia.com \
--cc=Zhigang.Luo@amd.com \
--cc=akpm@linux-foundation.org \
--cc=alison.schofield@intel.com \
--cc=alucerop@amd.com \
--cc=apopple@nvidia.com \
--cc=arun.george@samsung.com \
--cc=axelrasmussen@google.com \
--cc=balbirs@nvidia.com \
--cc=baohua@kernel.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=brendan.jackman@linux.dev \
--cc=byungchul@sk.com \
--cc=cgroups@vger.kernel.org \
--cc=chengming.zhou@linux.dev \
--cc=corbet@lwn.net \
--cc=dakr@kernel.org \
--cc=damon@lists.linux.dev \
--cc=dave.jiang@intel.com \
--cc=david@kernel.org \
--cc=dev.jain@arm.com \
--cc=djbw@kernel.org \
--cc=driver-core@lists.linux.dev \
--cc=gourry@gourry.net \
--cc=gregkh@linuxfoundation.org \
--cc=hannes@cmpxchg.org \
--cc=jackmanb@google.com \
--cc=jannh@google.com \
--cc=jgg@ziepe.ca \
--cc=jhubbard@nvidia.com \
--cc=joshua.hahnjy@gmail.com \
--cc=kasong@tencent.com \
--cc=kernel-team@meta.com \
--cc=kvm@vger.kernel.org \
--cc=lance.yang@linux.dev \
--cc=liam@infradead.org \
--cc=linux-cxl@vger.kernel.org \
--cc=linux-debuggers@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux@rasmusvillemoes.dk \
--cc=ljs@kernel.org \
--cc=longman@redhat.com \
--cc=matthew.brost@intel.com \
--cc=mhocko@suse.com \
--cc=mkoutny@suse.com \
--cc=muchun.song@linux.dev \
--cc=npache@redhat.com \
--cc=nvdimm@lists.linux.dev \
--cc=osalvador@suse.de \
--cc=osandov@osandov.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=pfalcato@suse.de \
--cc=qi.zheng@linux.dev \
--cc=rafael@kernel.org \
--cc=rakie.kim@sk.com \
--cc=ridong.chen@linux.dev \
--cc=roman.gushchin@linux.dev \
--cc=rppt@kernel.org \
--cc=ryan.roberts@arm.com \
--cc=shakeel.butt@linux.dev \
--cc=sj@kernel.org \
--cc=skhan@linuxfoundation.org \
--cc=surenb@google.com \
--cc=tj@kernel.org \
--cc=usama.arif@linux.dev \
--cc=vbabka@kernel.org \
--cc=vishal.l.verma@intel.com \
--cc=weixugc@google.com \
--cc=xu.xin16@zte.com.cn \
--cc=ying.huang@linux.alibaba.com \
--cc=yuanchu@google.com \
--cc=yury.norov@gmail.com \
--cc=yuzenghui@huawei.com \
--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