From: "Brendan Jackman" <brendan.jackman@linux.dev>
To: "Yosry Ahmed" <yosry@kernel.org>
Cc: "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>, <linux-mm@kvack.org>,
<linux-kernel@vger.kernel.org>, <x86@kernel.org>,
"Sumit Garg" <sumit.garg@oss.qualcomm.com>,
"Will Deacon" <will@kernel.org>, <rientjes@google.com>,
<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>,
"Patrick Bellasi" <derkling@google.com>,
"Reiji Watanabe" <reijiw@google.com>,
"Sean Christopherson" <seanjc@google.com>
Subject: Re: [PATCH v3 21/26] mm/page_alloc: implement FREETYPE_UNMAPPED allocations
Date: Fri, 14 Aug 2026 13:31:23 +0100 [thread overview]
Message-ID: <DKOO2SP5DOCP.1H09TE8XC0D5G@linux.dev> (raw)
In-Reply-To: <anJylMTl6GeM8OHx@google.com>
On Wed Aug 5, 2026 at 12:41 AM BST, Yosry Ahmed wrote:
> On Sun, Jul 26, 2026 at 10:22:54PM +0000, Brendan Jackman wrote:
>> Currently FREETYPE_UNMAPPED allocs will always fail because, although the
>> lists exist to hold them, there is no way to actually create an unmapped
>> page block. This commit adds one, and also the logic to map it back
>> again when that's needed.
>>
>> Doing this at pageblock granularity ensures that the pageblock flags can
>> be used to infer which freetype a page belongs to. It also provides nice
>> batching of TLB flushes, and also avoids creating too much unnecessary
>> TLB fragmentation in the physmap.
>>
>> There are some functional requirements for flipping a block:
>>
>> - Unmapping requires a TLB shootdown, meaning IRQs must be enabled.
>>
>> - Updating the pagetables might require allocating a pagetable to break
>> down a huge page. This would deadlock if the zone lock was held.
>
> We also need to zero unmapped/sensitive pages before mapping them again,
> but seems like the current approach is to differ this to the caller,
> which makes sense. The only annoying part is that
> want_init_on_{free/alloc}() now silently skip the zeroing for those
> pages.
This does look annoying but I think it's actually all fine and correct.
- It's forbidden to allocate with ALLOC_UNMAPPED and __GFP_ZERO, so the
__GFP_ZERO part of want_init_on_alloc() is still correct under
ALLOC_UNMAPPED.
- I think init_on_alloc's job is kernel hardening, i.e. it's a roadbump
for kernel exploit authors. If you have a bug that lets you read some
uninitialised memory via the kernel then init_on_alloc means you see
zeroes. But those vulns are automatically mitigated by ALLOC_UNMAPPED
anyway so this is fine.
- There is a very strong ambient rule that you must ensure memory is
zeroed before mapping it into userspace/VMs, but this is totally
separate from init_on_alloc. And it's fine for filesystems or whatever
to implement this however they want, __GFP_ZERO is just one way they
can do it.
This rule is totally separate from init_on_alloc, if you break it you
are immediately creating a vulnerability instead of just a second-
order weakness.
> We should document somewhere that the users of ALLOC_UNMAPPED are
> responsible for zeroing memory before freeing it?
So, no I don't think we need to document that, we just need to make sure
that the __GFP_ZERO restriction is clear.
> The current users currently always zero the pages on allocation as well,
> I am not sure if this should also be a general requirement, or perhaps
> only if want_init_on_alloc() is set?
>> This makes allocations that need to change sensitivity _somewhat_
>
> s/sensitivity/direct mapping status (or sth)?
Oops thanks.
>> similar to those that need to fallback to a different migratetype. But,
>> the locking requirements mean that this can't just be squashed into the
>> existing "fallback" allocator logic, instead a new allocator path just
>> for this purpose is needed.
>>
>> The new path is assumed to be much cheaper than the really heavyweight
>> stuff like compaction and reclaim. But at present it is treated as less
>> desirable than the mobility-related "fallback" and "stealing" logic.
>> This might turn out to need revision (in particular, maybe it's a
>> problem that __rmqueue_steal(), which causes fragmentation, happens
>> before __rmqueue_direct_map()), but that should be treated as a subsequent
>> optimisation project.
>>
>> Adding alloc_flags to gfp_freetype() requires moving it to
>> mm/page_alloc.h so it can refer to ALLOC_UNMAPPED. It was already only
>> used in internal mm code.
>>
>> Now that unmapped pageblocks actually exist, exclude them from
>> migration. Migrating unmapped pages via the mermap should be possible
>> but that's something to be added later when needed.
>>
>> Signed-off-by: Brendan Jackman <jackmanb@google.com>
> [..]
>> @@ -3400,6 +3426,127 @@ static inline void zone_statistics(struct zone *preferred_zone, struct zone *z,
>> #endif
>> }
>>
>> +#ifdef CONFIG_PAGE_ALLOC_UNMAPPED
>> +/* Try to allocate a page by mapping/unmapping a block from the direct map. */
>> +static inline struct page *
>> +__rmqueue_direct_map(struct zone *zone, unsigned int request_order,
>> + unsigned int alloc_flags, freetype_t freetype)
>> +{
>> + unsigned int ft_flags_other = freetype_flags(freetype) ^ FREETYPE_UNMAPPED;
>> + freetype_t ft_other = migrate_to_freetype(free_to_migratetype(freetype),
>> + ft_flags_other);
>> + bool want_mapped = !(freetype_flags(freetype) & FREETYPE_UNMAPPED);
>> + enum rmqueue_mode rmqm = RMQUEUE_NORMAL;
>> + unsigned long irq_flags;
>> + int nr_pageblocks, nr_freed;
>> + struct page *page;
>> + int alloc_order;
>> + int err;
>> +
>> + if (freetype_idx(ft_other) < 0)
>> + return NULL;
>> +
>> + /*
>> + * Might need a TLB shootdown. Even if IRQs are on this isn't
>> + * safe if the caller holds a lock (in case the other CPUs need that
>> + * lock to handle the shootdown IPI).
>> + */
>> + if (alloc_flags & ALLOC_NOBLOCK)
>> + return NULL;
>
> Should we only check this if !want_mapped? IIUC we only need a TLB
> shootdown when unmapping.
Hm, I don't think we wanna zero a pageblock with IRQs off. The comment
should reflect that though.
>> +
>> + if (!can_set_direct_map() || alloc_flags & ALLOC_NOLOCK)
>> + return NULL;
>> +
>> + lockdep_assert(!irqs_disabled() || unlikely(early_boot_irqs_disabled));
>> +
>> + /*
>> + * Need to [un]map a whole pageblock (otherwise it might require
>> + * allocating pagetables). First allocate it.
>> + */
>> + alloc_order = max(request_order, pageblock_order);
>> + nr_pageblocks = 1 << (alloc_order - pageblock_order);
>> + spin_lock_irqsave(&zone->lock, irq_flags);
>> + /* First try a block that already has the right migratetype. */
>> + page = __rmqueue(zone, alloc_order, ft_other, alloc_flags, &rmqm);
>
> IIUC, this is called after __rmqueue() will have already failed in the
> caller with request_order (a potentially smaller order), so why are we
> trying this again here?
The __rmqueue() that failed was with the opposite value of
FREETYPE_UNMAPPED.
>> + if (!page) {
>> + /* Fallback to changing a block's migratetype. */
>> + rmqm = RMQUEUE_CLAIM;
>> + page = __rmqueue(zone, alloc_order, ft_other, alloc_flags, &rmqm);
>> + }
>> + spin_unlock_irqrestore(&zone->lock, irq_flags);
>> + if (!page)
>> + return NULL;
>> +
>> + /*
>> + * Now that IRQs are on it's safe to do a TLB shootdown, and now that we
>> + * released the zone lock it's possible to allocate a pagetable if
>> + * needed to split up a huge page.
>> + *
>> + * Note that modifying the direct map may need to allocate pagetables.
>> + * What about unbounded recursion? Here are the assumptions that make it
>> + * safe:
>> + *
>> + * - The direct map starts out fully mapped at boot. (This is not really
>> + * an "assumption" as it's in direct control of page_alloc.c).
>> + *
>> + * - Once pages in the direct map are broken down, they are not
>> + * re-aggregated into larger pages again.
>> + *
>> + * - Pagetables are never allocated with ALLOC_UNMAPPED.
>> + *
>> + * Under these assumptions, a pagetable might need to be allocated while
>> + * _unmapping_ stuff from the direct map during an ALLOC_UNMAPPED
>> + * allocation. But, the allocation of that pagetable never requires
>> + * allocating a further pagetable.
>> + */
>> + err = set_direct_map_valid_noflush(page,
>> + nr_pageblocks << pageblock_order, want_mapped);
>> + if (err == -ENOMEM || WARN_ONCE(err, "err=%d\n", err)) {
>> + set_direct_map_valid_noflush(page,
>> + nr_pageblocks << pageblock_order, !want_mapped);
>> + spin_lock_irqsave(&zone->lock, irq_flags);
>> + /* Important: free using _old_ freetype. */
>> + __free_one_page(page, page_to_pfn(page), zone,
>> + alloc_order, ft_other, FPI_SKIP_REPORT_NOTIFY);
>> + spin_unlock_irqrestore(&zone->lock, irq_flags);
>> + return NULL;
>> + }
>> +
>> + if (want_mapped) {
>> + /* Exposing formerly-protected data; scrub it. */
>> + clear_highpages_kasan_tagged(page, nr_pageblocks << pageblock_order);
>
> Shouldn't all unmapped memory be zeroed on free? If we solidify this
> assumption we can probably drop this here (and maybe replace it with an
> assertion)?
Hm, that's true. I guess just a question of whether we do indeed want to
make that a hard rule for ALLOC_UNMAPPED. I'm not too sure about that, I
only really added that unconditional zeroing because I wanted to keep
the prior behaviour of secretmem/GUEST_MEMFD_FLAG_NO_DIRECT_MAP, but
maybe it's undesirable to place such a big burden on ALLOC_UNMAPPED? It
would be nice to be able to easily expand this into more
direct-map-killing behaviour...
>> + } else {
>> + unsigned long start = (unsigned long)page_address(page);
>> + unsigned long end = start + (nr_pageblocks << (pageblock_order + PAGE_SHIFT));
>> +
>> + flush_tlb_kernel_range(start, end);
>> + }
>> +
>> + for (int i = 0; i < nr_pageblocks; i++) {
>> + struct page *block_page = page + (pageblock_nr_pages * i);
>> +
>> + set_pageblock_freetype_flags(block_page, freetype_flags(freetype));
>> + }
>> +
>> + if (request_order >= alloc_order)
>> + return page;
>> +
>> + /* Free any remaining pages in the block. */
>> + spin_lock_irqsave(&zone->lock, irq_flags);
>> + nr_freed = expand(zone, page, request_order, alloc_order, freetype);
>> + account_freepages(zone, nr_freed, free_to_migratetype(freetype));
>> + spin_unlock_irqrestore(&zone->lock, irq_flags);
>> +
>> + return page;
>> +}
>> +#else /* CONFIG_PAGE_ALLOC_UNMAPPED */
>> +static inline struct page *__rmqueue_direct_map(struct zone *zone, unsigned int request_order,
>> + unsigned int alloc_flags, freetype_t freetype)
>> +{
>> + return NULL;
>> +}
>> +#endif /* CONFIG_PAGE_ALLOC_UNMAPPED */
>> +
>> static __always_inline
>> struct page *rmqueue_buddy(struct zone *preferred_zone, struct zone *zone,
>> unsigned int order, unsigned int alloc_flags,
>> @@ -3433,13 +3580,15 @@ struct page *rmqueue_buddy(struct zone *preferred_zone, struct zone *zone,
>> */
>> if (!page && (alloc_flags & (ALLOC_OOM|ALLOC_HARDER)))
>> page = __rmqueue_smallest(zone, order, ft_high);
>> -
>> - if (!page) {
>> - spin_unlock_irqrestore(&zone->lock, flags);
>> - return NULL;
>> - }
>> }
>> spin_unlock_irqrestore(&zone->lock, flags);
>> +
>> + /* Try changing direct map, now we've released the zone lock */
>> + if (!page)
>> + page = __rmqueue_direct_map(zone, order, alloc_flags, freetype);
>> + if (!page)
>> + return NULL;
>> +
>> } while (check_new_pages(page, order));
>>
>> /*
>> @@ -3660,6 +3809,8 @@ static void reserve_highatomic_pageblock(struct page *page, int order,
>> return;
>>
>> ft_high = freetype_with_migrate(ft, MIGRATE_HIGHATOMIC);
>> + if (freetype_idx(ft_high) < 0)
>> + return;
>
> Does this belong in "mm/page_alloc: add support for freetypes with no
> freelist"?
>
>> if (order < pageblock_order) {
>> if (move_freepages_block(zone, page, ft, ft_high) == -1)
>> return;
>> @@ -3975,13 +4126,15 @@ alloc_flags_nofragment(struct zone *zone, gfp_t gfp_mask)
>> }
>>
>> /* Must be called after current_gfp_context() which can change gfp_mask */
>> -static inline unsigned int alloc_flags_cma(gfp_t gfp_mask)
>> +static inline unsigned int alloc_flags_cma(gfp_t gfp_mask, unsigned int alloc_flags)
>> {
>> #ifdef CONFIG_CMA
>> - if (free_to_migratetype(gfp_freetype(gfp_mask)) == MIGRATE_MOVABLE)
>> - return ALLOC_CMA;
>> + if (free_to_migratetype(gfp_freetype(gfp_mask, alloc_flags)) == MIGRATE_MOVABLE)
>> + alloc_flags |= ALLOC_CMA;
>> #endif
>> - return ALLOC_DEFAULT;
>> + alloc_flags |= ALLOC_DEFAULT;
>> +
>> + return alloc_flags;
>> }
>>
>> /*
>> @@ -4770,7 +4923,7 @@ alloc_flags_slowpath(gfp_t gfp_mask, unsigned int order)
>> } else if (unlikely(rt_or_dl_task(current)) && in_task())
>> alloc_flags |= ALLOC_MIN_RESERVE;
>>
>> - alloc_flags |= alloc_flags_cma(gfp_mask);
>> + alloc_flags = alloc_flags_cma(gfp_mask, alloc_flags);
>>
>> if (defrag_mode)
>> alloc_flags |= ALLOC_NOFRAGMENT;
>> @@ -5085,7 +5238,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
>>
>> reserve_flags = __gfp_pfmemalloc_flags(gfp_mask);
>> if (reserve_flags)
>> - alloc_flags = alloc_flags_cma(gfp_mask) | reserve_flags |
>> + alloc_flags = alloc_flags_cma(gfp_mask, alloc_flags) | reserve_flags |
>> ac->alloc_flags | (alloc_flags & ALLOC_KSWAPD);
>
> Should we pass in ac->alloc_flags here to maintain equivalent
> functionality, maybe this:
>
> alloc_flags = alloc_flags_cma(gfp_mask, ac->alloc_flags) |
> reserve_flags | (alloc_flags & ALLOC_KSWAPD);
Um, what's the difference?
>>
>> /*
>> @@ -5307,7 +5460,11 @@ static inline bool prepare_alloc_pages(gfp_t gfp_mask, unsigned int order,
>> ac->highest_zoneidx = gfp_zone(gfp_mask);
>> ac->zonelist = node_zonelist(preferred_nid, gfp_mask);
>> ac->nodemask = nodemask;
>> - ac->freetype = gfp_freetype(gfp_mask);
>> + ac->freetype = gfp_freetype(gfp_mask, *alloc_flags);
>> +
>> + /* Not implemented yet. */
>> + if (freetype_flags(ac->freetype) & FREETYPE_UNMAPPED && gfp_mask & __GFP_ZERO)
>
> Nit: Add more parentheses for readability?
Yup sounds good.
next prev parent reply other threads:[~2026-08-14 12:31 UTC|newest]
Thread overview: 95+ 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-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-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-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-04 23:02 ` Yosry Ahmed
2026-08-14 10:48 ` Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 14/26] mm: move migratetype definitions to freetype.h Brendan Jackman
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-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-04 23:41 ` Yosry Ahmed
2026-08-07 0:05 ` Yosry Ahmed
2026-08-14 12:31 ` Brendan Jackman [this message]
2026-08-04 23:53 ` Yosry Ahmed
2026-08-05 16:13 ` Yosry Ahmed
2026-08-07 0:16 ` Yosry Ahmed
2026-08-12 21:26 ` 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-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=DKOO2SP5DOCP.1H09TE8XC0D5G@linux.dev \
--to=brendan.jackman@linux.dev \
--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=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®