Re: [PATCH 2/8] mm/khugepaged: extract young page check into collapse_is_young() helper
From: Usama Arif
Date: Mon Jul 06 2026 - 13:23:28 EST
On Mon, 6 Jul 2026 09:44:49 -0600 Nico Pache <npache@xxxxxxxxxx> wrote:
> The change deduplicates the "is this PTE young enough to count as
> referenced" condition that was repeated in both
> __collapse_huge_page_isolate() and collapse_scan_pmd(), extracting it into
> a single inline helper function.
>
> Also move the comment and use it as the function header. While we are at
> it, updated the comment to clarify that a young pte is a recently accessed
> one.
>
> Signed-off-by: Nico Pache <npache@xxxxxxxxxx>
Acked-by: Usama Arif <usama.arif@xxxxxxxxx>
> ---
> mm/khugepaged.c | 35 +++++++++++++++++++----------------
> 1 file changed, 19 insertions(+), 16 deletions(-)
>
> diff --git a/mm/khugepaged.c b/mm/khugepaged.c
> index b3985b854e77..48b008a3c891 100644
> --- a/mm/khugepaged.c
> +++ b/mm/khugepaged.c
> @@ -675,6 +675,23 @@ static void release_pte_pages(pte_t *pte, pte_t *_pte,
> }
> }
>
> +/*
> + * collapse_is_young() - Check for enough young pte to justify collapsing
> + *
> + * If collapse was initiated by khugepaged, check that the page has been
> + * recently accessed (young pte) to justify collapsing the page.
> + *
> + * Return: true if the page has been recently accessed (young pte).
> + */
> +static inline bool collapse_is_young(struct collapse_control *cc, pte_t pteval,
> + struct folio *folio, struct vm_area_struct *vma, unsigned long addr)
> +{
> + return cc->is_khugepaged &&
> + (pte_young(pteval) || folio_test_young(folio) ||
> + folio_test_referenced(folio) ||
> + mmu_notifier_test_young(vma->vm_mm, addr));
> +}
> +
> static enum scan_result __collapse_huge_page_isolate(struct vm_area_struct *vma,
> unsigned long start_addr, pte_t *pte, struct collapse_control *cc,
> unsigned int order, struct list_head *compound_pagelist)
> @@ -813,14 +830,7 @@ static enum scan_result __collapse_huge_page_isolate(struct vm_area_struct *vma,
> if (folio_test_large(folio))
> list_add_tail(&folio->lru, compound_pagelist);
> next:
> - /*
> - * If collapse was initiated by khugepaged, check that there is
> - * enough young pte to justify collapsing the page
> - */
> - if (cc->is_khugepaged &&
> - (pte_young(pteval) || folio_test_young(folio) ||
> - folio_test_referenced(folio) ||
> - mmu_notifier_test_young(vma->vm_mm, addr)))
> + if (collapse_is_young(cc, pteval, folio, vma, addr))
> referenced++;
> }
>
> @@ -1769,14 +1779,7 @@ static enum scan_result collapse_scan_pmd(struct mm_struct *mm,
> goto out_unmap;
> }
>
> - /*
> - * If collapse was initiated by khugepaged, check that there is
> - * enough young pte to justify collapsing the page
> - */
> - if (cc->is_khugepaged &&
> - (pte_young(pteval) || folio_test_young(folio) ||
> - folio_test_referenced(folio) ||
> - mmu_notifier_test_young(vma->vm_mm, addr)))
> + if (collapse_is_young(cc, pteval, folio, vma, addr))
> referenced++;
> }
> if (cc->is_khugepaged &&
> --
> 2.54.0
>
>