From: "David Hildenbrand (Arm)" <david@kernel.org>
To: Kiryl Shutsemau <kirill@shutemov.name>,
Andrew Morton <akpm@linux-foundation.org>,
Lorenzo Stoakes <ljs@kernel.org>, Zi Yan <ziy@nvidia.com>,
Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: "Kiryl Shutsemau (Meta)" <kas@kernel.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
kernel-team@meta.com, "Liam R. Howlett" <liam@infradead.org>,
Nico Pache <nico.pache@linux.dev>,
Ryan Roberts <ryan.roberts@arm.com>, Dev Jain <dev.jain@arm.com>,
Barry Song <baohua@kernel.org>, Lance Yang <lance.yang@linux.dev>,
Usama Arif <usama.arif@linux.dev>,
Vlastimil Babka <vbabka@kernel.org>, Jann Horn <jannh@google.com>
Subject: Re: [PATCH v3 11/12] mm/collapse: declare the collapse interface in collapse.h
Date: Wed, 23 Sep 2026 15:34:11 +0200 [thread overview]
Message-ID: <63f49a8b-cabf-4b93-a7e2-76b62c463a90@kernel.org> (raw)
In-Reply-To: <20260916093145.4022188-12-kirill@shutemov.name>
On 9/16/26 11:31, Kiryl Shutsemau wrote:
> From: "Kiryl Shutsemau (Meta)" <kas@kernel.org>
>
> A collapse takes four calls:
>
> - collapse_control_init() - set up the control a caller carries;
> - collapse_scan_pmd() - scan one PTE table, under mmap_lock;
> - collapse_run_pmd() - collapse what the scan found, no mmap_lock;
As discussed, having a single collapse_pmd() function might be cleaner if that's
easily possible.
collapse_pmd()
> - collapse_control_release() - done with the control.
>
And as discussed, I hope we can just get rid of a release function that's not
actually supposed to release anything right now (unless I was missing an update
in one of the patches).
> All four are static in khugepaged.c, as are collapse_possible_orders(),
> which says what a VMA allows, and the revalidate a caller needs once a
> collapse has given the mmap_lock up. No other file can ask for a collapse
> without them.
>
> Declare them in collapse.h, with a comment stating the order they are
> called in and who holds the lock over each step. Each function says
> what it needs and what it does where it is defined.
>
> hugepage_vma_revalidate() becomes collapse_vma_revalidate(): it is part of
> what a collapse offers now, not a helper of the daemon.
Is it just me or is collapse_vma_revalidate() an odd part of this interface?
You'd expect a matching function that performs the initial validation on a given
vma.
Maybe we should have a
orders = collapse_vma_validate(vma)
that really just wraps collapse_possible_orders(), an expose that instead to the
collapse users?
So they'd use collapse_vma_validate() to then call collapse_vma_revalidate()
after temporarily dropping the mmap lock?
[...]
> -static enum scan_result hugepage_vma_revalidate(struct mm_struct *mm, unsigned long address,
> +enum scan_result collapse_vma_revalidate(struct mm_struct *mm, unsigned long address,
> bool expect_anon, struct vm_area_struct **vmap,
> struct collapse_control *cc, unsigned int order)
> {
> @@ -1264,7 +1264,7 @@ static enum scan_result collapse_huge_page(struct mm_struct *mm,
> }
>
> mmap_read_lock(mm);
> - result = hugepage_vma_revalidate(mm, pmd_addr, /*expect_anon=*/ true,
> + result = collapse_vma_revalidate(mm, pmd_addr, /*expect_anon=*/ true,
> &vma, cc, order);
> if (result != SCAN_SUCCEED) {
> mmap_read_unlock(mm);
> @@ -1299,7 +1299,7 @@ static enum scan_result collapse_huge_page(struct mm_struct *mm,
> * mmap_lock.
> */
> mmap_write_lock(mm);
> - result = hugepage_vma_revalidate(mm, pmd_addr, /*expect_anon=*/ true,
> + result = collapse_vma_revalidate(mm, pmd_addr, /*expect_anon=*/ true,
> &vma, cc, order);
> if (result != SCAN_SUCCEED)
> goto out_up_write;
> @@ -2741,7 +2741,8 @@ static enum scan_result collapse_scan_file(struct mm_struct *mm,
> return result;
> }
>
> -static void collapse_control_init(struct collapse_control *cc)
> +/* Set up a control before its first scan; cc->policy is the caller's to fill */
Kerneldoc please. Applies to the other ones exposed as part of the same
interface as well.
--
Cheers,
David
next prev parent reply other threads:[~2026-09-23 13:34 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-16 9:31 [PATCH v3 00/12] mm/collapse: separate a collapse from its callers Kiryl Shutsemau
2026-09-16 9:31 ` [PATCH v3 01/12] mm/khugepaged: drop redundant mm_struct pin in madvise_collapse() Kiryl Shutsemau
2026-09-23 11:49 ` David Hildenbrand (Arm)
2026-09-16 9:31 ` [PATCH v3 02/12] mm/khugepaged: count collapses where khugepaged makes them Kiryl Shutsemau
2026-09-23 11:51 ` David Hildenbrand (Arm)
2026-09-16 9:31 ` [PATCH v3 03/12] mm/khugepaged: rename mthp_present_ptes bitmap to eligible_ptes Kiryl Shutsemau
2026-09-23 11:52 ` David Hildenbrand (Arm)
2026-09-16 9:31 ` [PATCH v3 04/12] mm/collapse: add collapse.h for the collapse interface Kiryl Shutsemau
2026-09-23 11:56 ` David Hildenbrand (Arm)
2026-09-16 9:31 ` [PATCH v3 05/12] mm/collapse: state what a collapse may do in the policy Kiryl Shutsemau
2026-09-23 12:24 ` David Hildenbrand (Arm)
2026-09-24 13:49 ` Kiryl Shutsemau
2026-09-16 9:31 ` [PATCH v3 06/12] mm/collapse: drop the collapse_possible() wrapper Kiryl Shutsemau
2026-09-23 12:25 ` David Hildenbrand (Arm)
2026-09-16 9:31 ` [PATCH v3 07/12] mm/collapse: name the per-table scan reset for what it resets Kiryl Shutsemau
2026-09-23 12:26 ` David Hildenbrand (Arm)
2026-09-16 9:31 ` [PATCH v3 08/12] mm/collapse: separate scanning a PTE table from collapsing it Kiryl Shutsemau
2026-09-18 9:06 ` Baolin Wang
2026-09-23 13:04 ` David Hildenbrand (Arm)
2026-09-24 14:19 ` Kiryl Shutsemau
2026-09-16 9:31 ` [PATCH v3 09/12] mm/collapse: open-code collapse_single_pmd() in its two callers Kiryl Shutsemau
2026-09-18 9:31 ` Baolin Wang
2026-09-23 13:08 ` David Hildenbrand (Arm)
2026-09-24 14:56 ` Kiryl Shutsemau
2026-09-16 9:31 ` [PATCH v3 10/12] mm/collapse: work out the orders a VMA allows once per VMA Kiryl Shutsemau
2026-09-23 13:19 ` David Hildenbrand (Arm)
2026-09-24 15:04 ` Kiryl Shutsemau
2026-09-16 9:31 ` [PATCH v3 11/12] mm/collapse: declare the collapse interface in collapse.h Kiryl Shutsemau
2026-09-23 13:34 ` David Hildenbrand (Arm) [this message]
2026-09-24 15:22 ` Kiryl Shutsemau
2026-09-28 12:03 ` David Hildenbrand (Arm)
2026-09-16 9:31 ` [PATCH v3 12/12] mm/collapse: implement MADV_COLLAPSE in madvise.c Kiryl Shutsemau
2026-09-16 22:48 ` [PATCH v3 00/12] mm/collapse: separate a collapse from its callers Andrew Morton
2026-09-17 12:26 ` Kiryl Shutsemau
2026-09-17 22:11 ` Andrew Morton
2026-09-23 13:52 ` David Hildenbrand (Arm)
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=63f49a8b-cabf-4b93-a7e2-76b62c463a90@kernel.org \
--to=david@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=baohua@kernel.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=dev.jain@arm.com \
--cc=jannh@google.com \
--cc=kas@kernel.org \
--cc=kernel-team@meta.com \
--cc=kirill@shutemov.name \
--cc=lance.yang@linux.dev \
--cc=liam@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=nico.pache@linux.dev \
--cc=ryan.roberts@arm.com \
--cc=usama.arif@linux.dev \
--cc=vbabka@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 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.