Re: [PATCH v4 0/7] mm/khugepaged: several cleanups
Andrew Morton <[email protected]>
| Newsgroups | org.kernel.vger.linux-doc,org.kernel.vger.linux-kernel,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On Tue, 11 Aug 2026 06:48:32 -0600 "Nico Pache (Red Hat)" <[email protected]> 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. Thanks, I've updated mm.git's mm-unstable branch to this version. > Changes in v4: > - Add Acks/RB tags > - [patch2] rename pte_is_referenced() to folio_pte_referenced() > - [patch2] keep cc->is_khugepaged out of the helper gate > - [patch2] simplify/clarify the helper comment Here's how v4 altered mm.git: mm/khugepaged.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) --- a/mm/khugepaged.c~b +++ a/mm/khugepaged.c @@ -693,20 +693,19 @@ static void release_pte_pages(pte_t *pte } /* - * pte_is_referenced() - Check for enough referenced PTEs to justify collapsing + * folio_pte_referenced() - Check if a folio or its PTE mapping was recently used * - * 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. + * Return: true if recent access was observed through either the folio state + * or the current PTE mapping. */ -static inline bool pte_is_referenced(struct collapse_control *cc, pte_t pteval, - struct folio *folio, struct vm_area_struct *vma, unsigned long addr) +static inline bool folio_pte_referenced(struct folio *folio, + struct vm_area_struct *vma, unsigned long addr, pte_t pteval) { - return cc->is_khugepaged && - (pte_young(pteval) || folio_test_young(folio) || - folio_test_referenced(folio) || - mmu_notifier_test_young(vma->vm_mm, addr)); + /* The folio was referenced previously ... */ + if (folio_test_young(folio) || folio_test_referenced(folio)) + return true; + /* ... or the PTE mapping was recently used */ + return pte_young(pteval) || mmu_notifier_test_young(vma->vm_mm, addr); } static void count_collapse_event(unsigned int order, enum vm_event_item vm_event, @@ -910,7 +909,8 @@ static enum scan_result __collapse_huge_ if (folio_test_large(folio)) list_add_tail(&folio->lru, compound_pagelist); next: - if (pte_is_referenced(cc, pteval, folio, vma, addr)) + if (cc->is_khugepaged && + folio_pte_referenced(folio, vma, addr, pteval)) referenced++; } @@ -1790,7 +1790,8 @@ static enum scan_result collapse_scan_pm goto out_unmap; } - if (pte_is_referenced(cc, pteval, folio, vma, addr)) + if (cc->is_khugepaged && + folio_pte_referenced(folio, vma, addr, pteval)) referenced++; } if (cc->is_khugepaged && _