[PATCH v2 0/7] mm/khugepaged: several cleanups

Nico Pache posted 7 patches 1 week, 3 days ago
Documentation/admin-guide/mm/transhuge.rst |   6 +-
mm/khugepaged.c                            | 399 +++++++++++----------
2 files changed, 214 insertions(+), 191 deletions(-)
[PATCH v2 0/7] mm/khugepaged: several cleanups
Posted by Nico Pache 1 week, 3 days ago
The following changes stem from a number of reviews during my khugepaged
mTHP support series [1]. Some of these are minor code cleanups, issues or
reviews that we decided to deferred to a followup series, or in the case
of the more major patch of the series, changes [2] Lance Yang attempted
while my series was in-flight and we decided to wait till later to try.

The first 3 patches introduce helper functions to increase code reuse and
readability. This includes a per-scan state clearing function, extracting
the young page check into a helper, and a count_collapse_event() function
to reduce a repetative pattern used across mTHP collapse.

The 4th patch was the byproduct of me throwing Claude at all the
comments in khugepaged verifying and looking for any outdated info.

The 5th patch is based on Lance Yang's commit series [2] trying to extract
the PTE state checking into a helper function. This required a bit of
rewriting due to differences after mTHP collapse was introduced. I also
took into account the changes requested during his patches review cycle.

The remaining 2 patches were review points during my mTHP series that we
agreed can be deferred to a later series.

Thank you to those whos reviews and work I leveraged to achieve these
cleanups.

V2 Changes:
 - Add Acks/RB tags
 - rename collapse_is_young() to collapse_is_referenced()
 - delete unncessary comment for collapse_control_init_scan()
 - merge fixup from V1 (fixes stale folio reference) into patch 5
 - keep original ordering for checks in patch 5
 - merge patch 7 into patch 4
 - conflict resolution from uffd_rwp changes 

V1: https://lore.kernel.org/all/20260706154500.39178-1-npache@redhat.com/

[1] - https://lore.kernel.org/all/20260605161422.213817-1-npache@redhat.com/
[2] - https://lore.kernel.org/all/20251008043748.45554-1-lance.yang@linux.dev/

Nico Pache (7):
  mm/khugepaged: refactor per-scan state clearing into
    collapse_control_init_scan()
  mm/khugepaged: extract young page check into collapse_is_referenced()
    helper
  mm/khugepaged: introduce a count_collapse_event() helper
  mm/khugepaged: fix outdated comments
  mm/khugepaged: Refactor the PTE state checks into a helper
  mm/khugepaged: unmap pte before releasing vma write lock
  mm: Documentation: clarify where the mTHP stats live

 Documentation/admin-guide/mm/transhuge.rst |   6 +-
 mm/khugepaged.c                            | 399 +++++++++++----------
 2 files changed, 214 insertions(+), 191 deletions(-)


base-commit: bdc38bfc1262e3d1432afadd2aa2ffd83d139dbb
-- 
2.54.0
Re: [PATCH v2 0/7] mm/khugepaged: several cleanups
Posted by Andrew Morton 1 week, 3 days ago
On Tue, 14 Jul 2026 20:59:29 -0600 Nico Pache <npache@redhat.com> wrote:

> The following changes stem from a number of reviews during my khugepaged
> mTHP support series [1]. Some of these are minor code cleanups, issues or
> reviews that we decided to deferred to a followup series, or in the case
> of the more major patch of the series, changes [2] Lance Yang attempted
> while my series was in-flight and we decided to wait till later to try.
> 
> The first 3 patches introduce helper functions to increase code reuse and
> readability. This includes a per-scan state clearing function, extracting
> the young page check into a helper, and a count_collapse_event() function
> to reduce a repetative pattern used across mTHP collapse.
> 
> The 4th patch was the byproduct of me throwing Claude at all the
> comments in khugepaged verifying and looking for any outdated info.
> 
> The 5th patch is based on Lance Yang's commit series [2] trying to extract
> the PTE state checking into a helper function. This required a bit of
> rewriting due to differences after mTHP collapse was introduced. I also
> took into account the changes requested during his patches review cycle.
> 
> The remaining 2 patches were review points during my mTHP series that we
> agreed can be deferred to a later series.
> 
> Thank you to those whos reviews and work I leveraged to achieve these
> cleanups.

Sashiko seems to have a good point about [5/7]:
	https://sashiko.dev/#/patchset/20260715025941.1571316-1-npache@redhat.com
Re: [PATCH v2 0/7] mm/khugepaged: several cleanups
Posted by Nico Pache 1 week, 3 days ago

On Tue, Jul 14, 2026 at 10:41 PM Andrew Morton <akpm@linux-foundation.org> wrote:
>
> On Tue, 14 Jul 2026 20:59:29 -0600 Nico Pache <npache@redhat.com> wrote:
>
> > The following changes stem from a number of reviews during my khugepaged
> > mTHP support series [1]. Some of these are minor code cleanups, issues or
> > reviews that we decided to deferred to a followup series, or in the case
> > of the more major patch of the series, changes [2] Lance Yang attempted
> > while my series was in-flight and we decided to wait till later to try.
> >
> > The first 3 patches introduce helper functions to increase code reuse and
> > readability. This includes a per-scan state clearing function, extracting
> > the young page check into a helper, and a count_collapse_event() function
> > to reduce a repetative pattern used across mTHP collapse.
> >
> > The 4th patch was the byproduct of me throwing Claude at all the
> > comments in khugepaged verifying and looking for any outdated info.
> >
> > The 5th patch is based on Lance Yang's commit series [2] trying to extract
> > the PTE state checking into a helper function. This required a bit of
> > rewriting due to differences after mTHP collapse was introduced. I also
> > took into account the changes requested during his patches review cycle.
> >
> > The remaining 2 patches were review points during my mTHP series that we
> > agreed can be deferred to a later series.
> >
> > Thank you to those whos reviews and work I leveraged to achieve these
> > cleanups.
>
> Sashiko seems to have a good point about [5/7]:
>         https://sashiko.dev/#/patchset/20260715025941.1571316-1-npache@redhat.com

Ah whoops! When i sent the fixup for V1 I only did it in one location when it
should have been for both callers of collapse_check_pte(). Sorry about that.

Here is the fixup for the missing variable assignment

Thank you,
-- Nico

commit 52adeb9998fe84c1f997a3b3b6e98c93f9754c95
Author: Nico Pache <npache@redhat.com>
Date:   Tue Jul 14 23:50:54 2026 -0600

    fixup: always set the local folio after collapse_check_pte()
    
    If we dont set the local folio to the result from collapse_check_pte()
    we can end up with cases that the goto out will result in pointing to a
    stale folio from the last successful PTE check.
    
    Signed-off-by: Nico Pache <npache@redhat.com>

diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index 40125dcb4de9..e5e349d0662e 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -1747,13 +1747,13 @@ static enum scan_result collapse_scan_pmd(struct mm_struct *mm,
 		cc->progress++;
 
 		pte_check = collapse_check_pte(pteval, addr, &ctx);
+		folio = ctx.folio;
 		if (pte_check == PTE_CHECK_FAIL) {
 			result = ctx.result;
 			goto out_unmap;
 		}
 		if (pte_check == PTE_CHECK_CONTINUE)
 			continue;
-		folio = ctx.folio;
 
 		/* Set bit for occupied pages */
 		__set_bit(i, cc->mthp_present_ptes);


>