All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lorenzo Stoakes <ljs@kernel.org>
To: Nico Pache <npache@redhat.com>
Cc: "David Hildenbrand (Arm)" <david@kernel.org>,
	 linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org,  linux-trace-kernel@vger.kernel.org,
	aarcange@redhat.com, akpm@linux-foundation.org,
	 anshuman.khandual@arm.com, apopple@nvidia.com,
	baohua@kernel.org,  baolin.wang@linux.alibaba.com,
	byungchul@sk.com, catalin.marinas@arm.com, cl@gentwo.org,
	 corbet@lwn.net, dave.hansen@linux.intel.com, dev.jain@arm.com,
	gourry@gourry.net,  hannes@cmpxchg.org, hughd@google.com,
	jack@suse.cz, jackmanb@google.com,  jannh@google.com,
	jglisse@google.com, joshua.hahnjy@gmail.com, kas@kernel.org,
	 lance.yang@linux.dev, liam@infradead.org,
	mathieu.desnoyers@efficios.com,  matthew.brost@intel.com,
	mhiramat@kernel.org, mhocko@suse.com, peterx@redhat.com,
	 pfalcato@suse.de, rakie.kim@sk.com, raquini@redhat.com,
	rdunlap@infradead.org,  richard.weiyang@gmail.com,
	rientjes@google.com, rostedt@goodmis.org, rppt@kernel.org,
	 ryan.roberts@arm.com, shivankg@amd.com, sunnanyong@huawei.com,
	surenb@google.com,  thomas.hellstrom@linux.intel.com,
	tiwai@suse.de, vbabka@suse.cz, vishal.moola@gmail.com,
	 wangkefeng.wang@huawei.com, will@kernel.org,
	willy@infradead.org,  yang@os.amperecomputing.com,
	ying.huang@linux.alibaba.com, ziy@nvidia.com, zokeefe@google.com,
	 Usama Arif <usama.arif@linux.dev>,
	usamaarif642@gmail.com
Subject: Re: [PATCH mm-unstable v18 11/14] mm/khugepaged: Introduce mTHP collapse support
Date: Thu, 4 Jun 2026 15:19:29 +0100	[thread overview]
Message-ID: <aiGIkgToAV4T71ab@lucifer> (raw)
In-Reply-To: <aiGFIrg8_vZZxnPg@lucifer>

On Thu, Jun 04, 2026 at 03:14:59PM +0100, Lorenzo Stoakes wrote:
> On Tue, Jun 02, 2026 at 11:23:35AM -0600, Nico Pache wrote:
> >
> >
> > On 6/1/26 7:15 AM, David Hildenbrand (Arm) wrote:
> > >>>
> > >>> Reading this, it is unclear why exactly do we need the stack.
> > >>
> > >> So I looked into your items below. It seems logical, and I think it
> > >> works the same way; however, your method seems slightly harder to
> > >> understand due to all the edge cases and more error-prone to future
> > >> changes (the stack holds implicit knowledge of the offset/order that
> > >> must now be tracked in the edge cases).
> > >>
> > >> Given the stack is 24 bytes, I'm not sure if the extra complexity is
> > >> worth saving that small amount of memory. Although we would also be
> > >> getting rid of (3?) functions, so both approaches have pros and cons.
> > >
> > > I consider a simple forward loop over the offset ... less complexity compared to
> > > a stack structure :)
> > >
> > >>
> > >> I will implement a patch comparing your solution against mine and send
> > >> it here, then we can decide which approach is better.
> > >
> > > Right, throw it over the fence and I'll see how to improve it further.
> >
> > Ok heres what the diff looks like on top of my V19.
> >
> > you can access the tree here https://gitlab.com/npache/linux/-/commits/mthp-v19?ref_type=heads for easier review.
> >
> > So far I have no problem with this approach it appeared cleaner than i thought. Did some light testing. Gonna throw it more through the ringer tomorrow.
> >
> >
> > From 9496c5d17eba7f6d04820d78c7c6f1592a58888a Mon Sep 17 00:00:00 2001
> > From: Nico Pache <npache@redhat.com>
> > Date: Tue, 2 Jun 2026 10:26:18 -0600
> > Subject: [PATCH] convert from stack to forward loop
> >
> > Signed-off-by: Nico Pache <npache@redhat.com>
> > ---
> >  mm/khugepaged.c | 96 ++++++++-----------------------------------------
> >  1 file changed, 15 insertions(+), 81 deletions(-)
> >
> > diff --git a/mm/khugepaged.c b/mm/khugepaged.c
> > index 498eba009751..6de935e76ceb 100644
> > --- a/mm/khugepaged.c
> > +++ b/mm/khugepaged.c
> > @@ -100,28 +100,6 @@ static DEFINE_READ_MOSTLY_HASHTABLE(mm_slots_hash, MM_SLOTS_HASH_BITS);
> >  static struct kmem_cache *mm_slot_cache __ro_after_init;
> >
> >  #define KHUGEPAGED_MIN_MTHP_ORDER	2
> > -/*
> > - * mthp_collapse() does an iterative DFS over a binary tree, from
> > - * HPAGE_PMD_ORDER down to KHUGEPAGED_MIN_MTHP_ORDER. The max stack
> > - * size needed for a DFS on a binary tree is height + 1, where
> > - * height = HPAGE_PMD_ORDER - KHUGEPAGED_MIN_MTHP_ORDER.
> > - *
> > - * ilog2 is used in place of HPAGE_PMD_ORDER because some architectures
> > - * (e.g. ppc64le) do not define HPAGE_PMD_ORDER until after build time.
> > - */
> > -#define MTHP_STACK_SIZE	(ilog2(MAX_PTRS_PER_PTE) - KHUGEPAGED_MIN_MTHP_ORDER + 1)
> > -
> > -/*
> > - * Defines a range of PTE entries in a PTE page table which are being
> > - * considered for mTHP collapse.
> > - *
> > - * @offset: the offset of the first PTE entry in a PMD range.
> > - * @order: the order of the PTE entries being considered for collapse.
> > - */
> > -struct mthp_range {
> > -	u16 offset;
> > -	u8 order;
> > -};
> >
> >  struct collapse_control {
> >  	bool is_khugepaged;
> > @@ -137,7 +115,6 @@ struct collapse_control {
> >
> >  	/* Each bit represents a single occupied (!none/zero) page. */
> >  	DECLARE_BITMAP(mthp_present_ptes, MAX_PTRS_PER_PTE);
> > -	struct mthp_range mthp_bitmap_stack[MTHP_STACK_SIZE];
> >  };
> >
> >  /**
> > @@ -1458,50 +1435,14 @@ static enum scan_result collapse_huge_page(struct mm_struct *mm, unsigned long s
> >  	return result;
> >  }
> >
> > -static void collapse_mthp_stack_push(struct collapse_control *cc, int *stack_size,
> > -				     u16 offset, u8 order)
> > -{
> > -	const int size = *stack_size;
> > -	struct mthp_range *stack = &cc->mthp_bitmap_stack[size];
> > -
> > -	VM_WARN_ON_ONCE(size >= MTHP_STACK_SIZE);
> > -	stack->order = order;
> > -	stack->offset = offset;
> > -	(*stack_size)++;
> > -}
> > -
> > -static struct mthp_range collapse_mthp_stack_pop(struct collapse_control *cc,
> > -						 int *stack_size)
> > -{
> > -	const int size = *stack_size;
> > -
> > -	VM_WARN_ON_ONCE(size <= 0);
> > -	(*stack_size)--;
> > -	return cc->mthp_bitmap_stack[size - 1];
> > -}
> > -
> >  /*
> >   * mthp_collapse() consumes the bitmap that is generated during
> >   * collapse_scan_pmd() to determine what regions and mTHP orders fit best.
> >   *
> >   * Each bit in cc->mthp_present_ptes represents a single occupied (!none/zero)
> > - * page. A stack structure cc->mthp_bitmap_stack is used to check different
> > - * regions of the bitmap for collapse eligibility. The stack maintains a pair
> > - * of variables (offset, order), indicating the number of PTEs from the start
> > - * of the PMD, and the order of the potential collapse candidate respectively.
> > - * We start at the PMD order and check if it is eligible for collapse; if not,
> > - * we add two entries to the stack at a lower order to represent the left and
> > - * right halves of the PTE page table we are examining.
> > - *
> > - *                         offset       mid_offset
> > - *                         |         |
> > - *                         |         |
> > - *                         v         v
> > - *      --------------------------------------
> > - *      |       cc->mthp_present_ptes         |
> > - *      --------------------------------------
> > - *                         <-------><------->
> > - *                          order-1  order-1
> > + * page. We start at the PMD order and check if it is eligible for collapse;
> > + * if not, we check the left and right halves of the PTE page table we are
> > + * examining at a lower order.
>
> Yeah this is not good enough sorry, before there was some kind of explanation of
> the algortihm, just because you can explain the _code_ more simply, that's not
> very useful.
>
> I had to sit down and spend quite a bit of time to figure out how the actual
> output looks so I think that should be explained.
>
> >   *
> >   * For each of these, we determine how many PTE entries are occupied in the
> >   * range of PTE entries we propose to collapse, then we compare this to a
> > @@ -1517,26 +1458,20 @@ static enum scan_result mthp_collapse(struct mm_struct *mm,
> >  {
> >  	unsigned int nr_occupied_ptes, nr_ptes, max_ptes_none;
> >  	enum scan_result last_result = SCAN_FAIL;
> > -	int collapsed = 0, stack_size = 0;
> > +	int collapsed = 0;
> >  	bool alloc_failed = false;
> >  	unsigned long collapse_address;
> > -	struct mthp_range range;
> > -	u16 offset;
> > -	u8 order;
> > +	unsigned int offset = 0;
> > +	unsigned int order = HPAGE_PMD_ORDER;
> >
> > -	collapse_mthp_stack_push(cc, &stack_size, 0, HPAGE_PMD_ORDER);
> >
> > -	while (stack_size) {
> > -		range = collapse_mthp_stack_pop(cc, &stack_size);
> > -		order = range.order;
> > -		offset = range.offset;
> > +	while (offset < HPAGE_PMD_NR) {
> >  		nr_ptes = 1UL << order;
> >
> >  		if (!test_bit(order, &enabled_orders))
> >  			goto next_order;
> >
> >  		max_ptes_none = collapse_max_ptes_none(cc, NULL, order);
> > -
> >  		nr_occupied_ptes = bitmap_weight_from(cc->mthp_present_ptes, offset,
> >  						      offset + nr_ptes);
> >
> > @@ -1553,7 +1488,7 @@ static enum scan_result mthp_collapse(struct mm_struct *mm,
> >  				collapsed += nr_ptes;
> >  				fallthrough;
> >  			case SCAN_PTE_MAPPED_HUGEPAGE:
> > -				continue;
> > +				goto next_offset;
> >  			/* Cases where lower orders might still succeed */
> >  			case SCAN_ALLOC_HUGE_PAGE_FAIL:
> >  				alloc_failed = true;
> > @@ -1581,15 +1516,14 @@ static enum scan_result mthp_collapse(struct mm_struct *mm,
> >  		}
> >
>
> This obviously needs some comments describing what you're doing here. I think
> David said so too.
>
> >  next_order:
> > -		if ((BIT(order) - 1) & enabled_orders) {
> > -			const u8 next_order = order - 1;
> > -			const u16 mid_offset = offset + (nr_ptes / 2);
> > -
> > -			collapse_mthp_stack_push(cc, &stack_size, mid_offset,
> > -						 next_order);
> > -			collapse_mthp_stack_push(cc, &stack_size, offset,
> > -						 next_order);
> > +		if (order > KHUGEPAGED_MIN_MTHP_ORDER &&
> > +			(BIT(order) - 1) & enabled_orders) {
>
> Wait, if I disable an order this changes the way we get mTHP doesn't it?
>
> Let's say I disable order-4 but retain order-3 and order-2 for offset 0 we get:
>
> 9->8->7->6->5->5->6->5->5->7
>
> And we simply can't get order-3 no?
>
> This seems broken doesn't it? Maybe I'm missing something?

OK it's the way this is written, very confusing. I do not know why you are
writing this code in this 'compressed' way.

(1 << order) - 1) & enabled_orders is to see if there's _any others_ to check.

>
>
> > +			order = order - 1;
>
> order--?
>
> > +			continue;
> >  		}
> > +next_offset:
> > +		offset += nr_ptes;
> > +		order = min_t(int, __ffs(offset), HPAGE_PMD_ORDER);
>
> Also wouldn't, in the case where an enabled order check above skips an order--,
> we could have offset=0 here and end up just looping around checking from (0,
> HPAGE_PMD_ORDER) again? That also seems broken?

Yeah sorry the offset += nr_ptes fixes that anyway.

And the fact it's a mask check above makes this OK.

So the logic seems probably fine but it needs to be clearer.

>
> Also, what's __ffs(0)? Isn't it undefined? We shouldn't be relying on undefined
> behaviour no?
>
> https://elixir.bootlin.com/linux/v7.0.10/source/include/asm-generic/bitops/builtin-__ffs.h#L5
> Says as much?
>
> I guess we're assuming we're not going to get to 0 here, but that could do with
> a comment or a VM_WARN_ON_ONCE() at least.
>
> Also why aren't we making this a function?
>
> static inline unsigned int max_order_from_offset(unsigned int offset)
> {
> 	if (!offset)
> 		return HPAGE_PMD_ORDER;
>
> 	return __ffs(offset);
> }
>
> Though __ffs() works on unsigned long... probably... OK?
>
> >  	}
> >  done:
> >  	if (collapsed)
> > --
> > 2.54.0
> >
> >
> >
> > >
> > > [...]
> > >
> > >>>> +     bitmap_zero(cc->mthp_bitmap, MAX_PTRS_PER_PTE);
> > >>>>       memset(cc->node_load, 0, sizeof(cc->node_load));
> > >>>>       nodes_clear(cc->alloc_nmask);
> > >>>> +
> > >>>> +     enabled_orders = collapse_allowable_orders(vma, vma->vm_flags, tva_flags);
> > >>>> +
> > >>>> +     /*
> > >>>> +      * If PMD is the only enabled order, enforce max_ptes_none, otherwise
> > >>>> +      * scan all pages to populate the bitmap for mTHP collapse.
> > >>>> +      */
> > >>>
> > >>> You should note here, that we re-verify in mthp_collapse().
> > >>>
> > >>> But the question is, whether we should relocate the check completely into
> > >>> mthp_collapse(), instead of conditionally duplicating it.
> > >>>
> > >>> What speaks against always populating the bitmap and making the decision in
> > >>> mthp_collapse()?
> > >>>
> > >>> Sure, we might scan a page table a bit longer, but the code gets clearer ... and
> > >>> I am not sure if scanning some more page table entries is really that critical here.
> > >>
> > >> Someone asked me to preserve the legacy behavior (PMD only). Although
> > >> rather trivial, if you set max_ptes_none=0 for example, we'd still
> > >> have to do 511 iterations for no reason if PMD collapse is the only
> > >> enabled order rather than bailing immediately.
> > >>
> > >> I'm ok with dropping it, but I think its the correct approach (despite
> > >> the extra complexity). @Usama Arif brought up this point here
> > >> https://lore.kernel.org/all/f8f7bb71-ca31-46ee-a62d-7ddfd83e0ead@gmail.com/
> > >
> > > We talk about regressions, but I am not sure if we care about scanning speed
> > > within a page table that much?
> > >
> > > After all, we locked it and already read some entries.
> > >
> > > Having the same check at two places to optimize for PMD order might right now
> > > feel like a good optimization, but likely an irrelevant one in a near future?
> > >
> > > Anyhow, won't push back, as long as we document why we are special casing things
> > > here.
> > >
> >
>
> Thanks, Lorenzo

  reply	other threads:[~2026-06-04 14:19 UTC|newest]

Thread overview: 145+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-22 14:59 [PATCH mm-hotfixes-unstable v18 00/14] khugepaged: add mTHP collapse support Nico Pache
2026-05-22 14:59 ` [PATCH mm-unstable v18 01/14] mm/khugepaged: generalize hugepage_vma_revalidate for mTHP support Nico Pache
2026-05-22 14:59 ` [PATCH mm-unstable v18 02/14] mm/khugepaged: generalize alloc_charge_folio() Nico Pache
2026-05-22 14:59 ` [PATCH mm-unstable v18 03/14] mm/khugepaged: rework max_ptes_* handling with helper functions Nico Pache
2026-05-22 21:16   ` David Hildenbrand (Arm)
2026-06-01 13:26   ` Lorenzo Stoakes
2026-06-05 16:04   ` Zi Yan
2026-05-22 14:59 ` [PATCH mm-unstable v18 04/14] mm/khugepaged: generalize __collapse_huge_page_* for mTHP support Nico Pache
2026-05-22 21:24   ` David Hildenbrand (Arm)
2026-05-26 14:39   ` Nico Pache
2026-06-01 14:04   ` Lorenzo Stoakes
2026-05-22 15:00 ` [PATCH mm-unstable v18 05/14] mm/khugepaged: require collapse_huge_page to enter/exit with the lock dropped Nico Pache
2026-06-01 14:07   ` Lorenzo Stoakes
2026-06-02 10:26     ` Nico Pache
2026-05-22 15:00 ` [PATCH mm-unstable v18 06/14] mm/khugepaged: generalize collapse_huge_page for mTHP collapse Nico Pache
2026-05-22 21:47   ` David Hildenbrand (Arm)
2026-05-26 14:42   ` Nico Pache
2026-05-31  9:39   ` Lance Yang
2026-05-31 20:00     ` David Hildenbrand (Arm)
2026-06-01  3:28       ` Lance Yang
2026-06-01  6:54         ` David Hildenbrand (Arm)
2026-06-01  7:49           ` Lance Yang
2026-06-01  8:15             ` David Hildenbrand (Arm)
2026-06-01  8:44               ` Lance Yang
2026-06-01 10:09                 ` David Hildenbrand (Arm)
2026-06-01  9:08           ` Lance Yang
2026-06-01 10:23             ` David Hildenbrand (Arm)
2026-06-01 10:47               ` Lance Yang
2026-06-01 11:13                 ` David Hildenbrand (Arm)
2026-06-01 15:00                   ` Nico Pache
2026-06-01 15:05                     ` David Hildenbrand (Arm)
2026-06-01 16:07                       ` Lance Yang
2026-06-04 17:04                     ` Nico Pache
2026-06-04 18:12                       ` Lorenzo Stoakes
2026-06-05  7:18                       ` David Hildenbrand (Arm)
2026-06-05  8:07                         ` Lorenzo Stoakes
2026-06-05  8:59                           ` Lance Yang
2026-06-02 15:30                 ` Nico Pache
2026-06-02 16:34                   ` Lance Yang
2026-06-04 12:33           ` Lorenzo Stoakes
2026-06-04 10:21   ` Lorenzo Stoakes
2026-06-04 10:32     ` Nico Pache
2026-06-04 11:38   ` Lorenzo Stoakes
2026-06-04 12:39     ` Lorenzo Stoakes
2026-06-04 12:45       ` Nico Pache
2026-06-04 12:55         ` Lorenzo Stoakes
2026-06-04 16:28           ` Nico Pache
2026-05-22 15:00 ` [PATCH mm-unstable v18 07/14] mm/khugepaged: skip collapsing mTHP to smaller orders Nico Pache
2026-05-22 21:51   ` David Hildenbrand (Arm)
2026-05-22 15:00 ` [PATCH mm-unstable v18 08/14] mm/khugepaged: add per-order mTHP collapse failure statistics Nico Pache
2026-05-31 20:09   ` David Hildenbrand (Arm)
2026-06-01 14:13   ` Lorenzo Stoakes
2026-05-22 15:00 ` [PATCH mm-unstable v18 09/14] mm/khugepaged: improve tracepoints for mTHP orders Nico Pache
2026-05-22 15:00 ` [PATCH mm-unstable v18 10/14] mm/khugepaged: introduce collapse_allowable_orders helper function Nico Pache
2026-05-31 20:18   ` David Hildenbrand (Arm)
2026-06-01 14:35     ` Lorenzo Stoakes
2026-06-01 14:40       ` David Hildenbrand (Arm)
2026-05-22 15:00 ` [PATCH mm-unstable v18 11/14] mm/khugepaged: Introduce mTHP collapse support Nico Pache
2026-05-25 14:15   ` Nico Pache
2026-05-25 19:10     ` Andrew Morton
2026-05-26  6:57       ` Wei Yang
2026-05-26 12:07         ` Nico Pache
2026-05-28  8:42           ` Wei Yang
2026-05-28 17:11             ` Nico Pache
2026-05-31  7:18   ` Lance Yang
2026-05-31  8:48     ` Lance Yang
2026-06-01 12:01       ` Nico Pache
2026-06-01 12:06         ` David Hildenbrand (Arm)
2026-06-02 10:58     ` Nico Pache
2026-06-02 15:44       ` Lance Yang
2026-06-03  8:05         ` David Hildenbrand (Arm)
2026-06-04 14:40           ` Lorenzo Stoakes
2026-06-01  8:11   ` David Hildenbrand (Arm)
2026-06-01 12:40     ` Nico Pache
2026-06-01 13:15       ` David Hildenbrand (Arm)
2026-06-02 17:23         ` Nico Pache
2026-06-02 17:26           ` Nico Pache
2026-06-03  9:55           ` David Hildenbrand (Arm)
2026-06-03 10:00           ` David Hildenbrand (Arm)
2026-06-03 12:16             ` Nico Pache
2026-06-03 12:27               ` David Hildenbrand (Arm)
2026-06-04 14:14           ` Lorenzo Stoakes
2026-06-04 14:19             ` Lorenzo Stoakes [this message]
2026-06-04 13:53     ` Lorenzo Stoakes
2026-06-04 13:59       ` Lorenzo Stoakes
2026-06-04 14:45   ` Lorenzo Stoakes
2026-06-05 11:07     ` Nico Pache
2026-06-05 11:08       ` Nico Pache
2026-05-22 15:00 ` [PATCH mm-unstable v18 12/14] mm/khugepaged: avoid unnecessary mTHP collapse attempts Nico Pache
2026-05-31  7:31   ` Lance Yang
2026-05-31 20:02     ` David Hildenbrand (Arm)
2026-06-01  1:53       ` Lance Yang
2026-05-22 15:00 ` [PATCH mm-unstable v18 13/14] mm/khugepaged: run khugepaged for all orders Nico Pache
2026-05-22 15:00 ` [PATCH mm-unstable v18 14/14] Documentation: mm: update the admin guide for mTHP collapse Nico Pache
2026-05-22 21:58   ` David Hildenbrand (Arm)
2026-05-26 12:00     ` Nico Pache
2026-05-26 14:45   ` Nico Pache
2026-05-22 15:07 ` [PATCH mm-hotfixes-unstable v18 00/14] khugepaged: add mTHP collapse support Nico Pache
2026-05-22 15:13   ` Vlastimil Babka (SUSE)
2026-05-22 16:11     ` Nico Pache
2026-05-22 21:13       ` David Hildenbrand (Arm)
2026-05-26  8:33         ` Process (was Re: [PATCH mm-hotfixes-unstable v18 00/14] khugepaged: add mTHP) " Lorenzo Stoakes
2026-05-26 19:09           ` Andrew Morton
2026-05-26 20:42           ` Vlastimil Babka (SUSE)
2026-05-31 19:49             ` David Hildenbrand (Arm)
2026-06-01 15:41               ` Lorenzo Stoakes
2026-06-01 15:45                 ` David Hildenbrand (Arm)
2026-06-01 16:16                   ` Lorenzo Stoakes
2026-06-02 11:20                     ` David Hildenbrand (Arm)
2026-06-02 11:31                       ` David Hildenbrand (Arm)
2026-06-02 12:47                         ` Lorenzo Stoakes
2026-06-02 12:55                         ` Vlastimil Babka (SUSE)
2026-06-02 13:01                           ` David Hildenbrand (Arm)
2026-06-02 17:31                           ` Mike Rapoport
2026-06-03  6:48                             ` Lorenzo Stoakes
2026-06-03  8:39                               ` Mike Rapoport
2026-06-03  9:57                                 ` Mark Brown
2026-06-03 10:51                                   ` Mike Rapoport
2026-06-03  9:03                               ` Mark Brown
2026-06-02 12:40                       ` Lorenzo Stoakes
2026-06-02 12:49                         ` David Hildenbrand (Arm)
2026-06-02 12:47                       ` Vlastimil Babka (SUSE)
2026-06-02 12:58                         ` David Hildenbrand (Arm)
2026-06-02 13:08                           ` Vlastimil Babka (SUSE)
2026-06-02 13:16                             ` David Hildenbrand (Arm)
2026-06-03  1:48                               ` SeongJae Park
2026-06-05 15:24                                 ` David Hildenbrand (Arm)
2026-06-06  0:01                                   ` SeongJae Park
2026-06-01 15:37             ` Lorenzo Stoakes
2026-06-01 15:43               ` David Hildenbrand (Arm)
2026-06-01 15:47                 ` Lorenzo Stoakes
2026-06-01 16:00                   ` David Hildenbrand (Arm)
2026-05-22 15:16   ` [PATCH mm-hotfixes-unstable v18 00/14] khugepaged: add mTHP " Lorenzo Stoakes
2026-05-22 16:08     ` Nico Pache
2026-05-22 16:19       ` Lorenzo Stoakes
2026-05-22 16:31         ` Nico Pache
2026-05-22 17:12           ` Lorenzo Stoakes
2026-05-26  8:14             ` Lorenzo Stoakes
2026-05-22 15:13 ` Lorenzo Stoakes
2026-05-22 20:47 ` Andrew Morton
2026-06-01 15:58   ` Alexander Gordeev
2026-06-01 17:05     ` Nico Pache
2026-06-01 17:08     ` Lorenzo Stoakes
2026-06-02  1:53       ` Lance Yang
2026-06-04 10:10 ` Lorenzo Stoakes

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=aiGIkgToAV4T71ab@lucifer \
    --to=ljs@kernel.org \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=anshuman.khandual@arm.com \
    --cc=apopple@nvidia.com \
    --cc=baohua@kernel.org \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=byungchul@sk.com \
    --cc=catalin.marinas@arm.com \
    --cc=cl@gentwo.org \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@linux.intel.com \
    --cc=david@kernel.org \
    --cc=dev.jain@arm.com \
    --cc=gourry@gourry.net \
    --cc=hannes@cmpxchg.org \
    --cc=hughd@google.com \
    --cc=jack@suse.cz \
    --cc=jackmanb@google.com \
    --cc=jannh@google.com \
    --cc=jglisse@google.com \
    --cc=joshua.hahnjy@gmail.com \
    --cc=kas@kernel.org \
    --cc=lance.yang@linux.dev \
    --cc=liam@infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=matthew.brost@intel.com \
    --cc=mhiramat@kernel.org \
    --cc=mhocko@suse.com \
    --cc=npache@redhat.com \
    --cc=peterx@redhat.com \
    --cc=pfalcato@suse.de \
    --cc=rakie.kim@sk.com \
    --cc=raquini@redhat.com \
    --cc=rdunlap@infradead.org \
    --cc=richard.weiyang@gmail.com \
    --cc=rientjes@google.com \
    --cc=rostedt@goodmis.org \
    --cc=rppt@kernel.org \
    --cc=ryan.roberts@arm.com \
    --cc=shivankg@amd.com \
    --cc=sunnanyong@huawei.com \
    --cc=surenb@google.com \
    --cc=thomas.hellstrom@linux.intel.com \
    --cc=tiwai@suse.de \
    --cc=usama.arif@linux.dev \
    --cc=usamaarif642@gmail.com \
    --cc=vbabka@suse.cz \
    --cc=vishal.moola@gmail.com \
    --cc=wangkefeng.wang@huawei.com \
    --cc=will@kernel.org \
    --cc=willy@infradead.org \
    --cc=yang@os.amperecomputing.com \
    --cc=ying.huang@linux.alibaba.com \
    --cc=ziy@nvidia.com \
    --cc=zokeefe@google.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.