mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Lance Yang <lance.yang@linux.dev>
To: songmuchun@bytedance.com
Cc: osalvador@suse.de, akpm@linux-foundation.org, rppt@kernel.org,
	qi.zheng@linux.dev, lance.yang@linux.dev, jthoughton@google.com,
	david@kernel.org, muchun.song@linux.dev, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 10/12] mm: hugetlb_vmemmap: make vmemmap restoration folio-oriented
Date: Fri, 23 Oct 2026 11:46:55 +0800	[thread overview]
Message-ID: <20261023034655.37422-1-lance.yang@linux.dev> (raw)
In-Reply-To: <20261020115824.823278-9-songmuchun@bytedance.com>


On Tue, Oct 20, 2026 at 07:58:22PM +0800, Muchun Song wrote:
>Like optimization, vmemmap restoration operates on one folio at a time,
>but the current interface exposes a raw address range and requires the
>HugeTLB caller to prepare part of the operation.  This splits the common
>mechanism across layers and obscures its natural unit of work.
>
>Make the folio the unit of vmemmap restoration and move the common
>mechanics behind a folio-oriented interface.  This keeps HugeTLB-specific
>eligibility and state in the caller and gives both directions of HVO
>consistent folio-level interfaces.
>
>No functional change intended.
>
>Signed-off-by: Muchun Song <songmuchun@bytedance.com>
>---
> mm/hugetlb_vmemmap.c | 37 +++++++++++++------------------------
> 1 file changed, 13 insertions(+), 24 deletions(-)
>
>diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c
>index b76203e34881..97748a9cefe2 100644
>--- a/mm/hugetlb_vmemmap.c
>+++ b/mm/hugetlb_vmemmap.c
>@@ -360,28 +360,29 @@ static int vmemmap_optimize_folio(const struct folio *folio,
> }
> 
> /**
>- * vmemmap_remap_alloc - remap the vmemmap virtual address range [@start, end)
>- *			 to the page which is from the @vmemmap_pages
>- *			 respectively.
>- * @start:	start address of the vmemmap virtual address range that we want
>- *		to remap.
>- * @end:	end address of the vmemmap virtual address range that we want to
>- *		remap.
>- * @flags:	modifications to vmemmap_remap_walk flags
>+ * vmemmap_restore_folio - restore the vmemmap backing of a folio
>+ * @folio:	folio whose vmemmap pages should be restored.
>+ * @flags:	vmemmap remap control flags passed to vmemmap_remap_walk.
>+ *
>+ * Remap @folio's vmemmap so optimizable entries are restored from the shared
>+ * tail page back to distinct backing pages allocated for @folio, while
>+ * non-optimizable entries remain unchanged.
>  *
>  * Return: %0 on success, negative error code otherwise.
>  */
>-static int vmemmap_remap_alloc(unsigned long start, unsigned long end,
>-			       unsigned long flags)
>+static int vmemmap_restore_folio(const struct folio *folio, unsigned long flags)
> {
> 	LIST_HEAD(vmemmap_pages);
>-	int nid = page_to_nid((struct page *)start);
>+	int nid = folio_nid(folio);
>+	unsigned long start = (unsigned long)folio_page(folio, 0);
>+	unsigned long end = start + folio_vmemmap_size(folio);
> 	struct vmemmap_remap_walk walk = {
> 		.remap_pte	= vmemmap_restore_pte,
> 		.vmemmap_pages	= &vmemmap_pages,
> 		.flags		= flags,
> 	};
> 
>+	start += VMEMMAP_OPTIMIZATION_SIZE;
> 	if (alloc_vmemmap_page_list(&vmemmap_pages, (end - start) / PAGE_SIZE, nid))
> 		return -ENOMEM;
> 
>@@ -399,7 +400,6 @@ static int __hugetlb_vmemmap_restore_folio(const struct hstate *h,
> 					   struct folio *folio, unsigned long flags)
> {
> 	int ret;
>-	unsigned long vmemmap_start, vmemmap_end;
> 
> 	VM_WARN_ON_ONCE_FOLIO(!folio_test_hugetlb(folio), folio);
> 	VM_WARN_ON_ONCE_FOLIO(folio_ref_count(folio), folio);
>@@ -407,18 +407,7 @@ static int __hugetlb_vmemmap_restore_folio(const struct hstate *h,
> 	if (!folio_test_hugetlb_vmemmap_optimized(folio))
> 		return 0;
> 
>-	vmemmap_start	= (unsigned long)&folio->page;
>-	vmemmap_end	= vmemmap_start + hugetlb_vmemmap_size(h);
>-
>-	vmemmap_start	+= VMEMMAP_OPTIMIZATION_SIZE;
>-
>-	/*
>-	 * The pages which the vmemmap virtual address range [@vmemmap_start,
>-	 * @vmemmap_end) are mapped to are freed to the buddy allocator.
>-	 * When a HugeTLB page is freed to the buddy allocator, previously
>-	 * discarded vmemmap pages must be allocated and remapping.
>-	 */
>-	ret = vmemmap_remap_alloc(vmemmap_start, vmemmap_end, flags);
>+	ret = vmemmap_restore_folio(folio, flags);

Nit: we don't use h in __hugetlb_vmemmap_restore_folio() anymore. Could
we drop it from that helper while at it?

Otherwise, LGTM!

Reviewed-by: Lance Yang <lance.yang@linux.dev>

  reply	other threads:[~2026-10-23  3:47 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-20 11:52 [PATCH 00/12] mm: Decouple folio-based vmemmap optimization from HugeTLB Muchun Song
2026-10-20 11:52 ` [PATCH 01/12] mm: hugetlb_vmemmap: remove HugeTLB-specific vmemmap optimization macros Muchun Song
2026-10-22  3:43   ` Lance Yang
2026-10-20 11:58 ` [PATCH 02/12] mm: hugetlb_vmemmap: unify VMEMMAP_{SPLIT,REMAP}_NO_TLB_FLUSH Muchun Song
2026-10-20 11:58   ` [PATCH 03/12] mm: hugetlb_vmemmap: simplify vmemmap head page handling Muchun Song
2026-10-22  6:24     ` Lance Yang
2026-10-22  6:27       ` Muchun Song
2026-10-22  7:23     ` Lance Yang
2026-10-20 11:58   ` [PATCH 04/12] mm: hugetlb_vmemmap: generalize vmemmap page allocation Muchun Song
2026-10-22 13:54     ` Lance Yang
2026-10-20 11:58   ` [PATCH 05/12] mm: hugetlb_vmemmap: unify writable vmemmap page preparation Muchun Song
2026-10-22 14:13     ` Lance Yang
2026-10-20 11:58   ` [PATCH 06/12] mm: hugetlb_vmemmap: rename vmemmap_remap_pte() to vmemmap_optimize_pte() Muchun Song
2026-10-23  0:55     ` Lance Yang
2026-10-20 11:58   ` [PATCH 07/12] mm: hugetlb_vmemmap: simplify shared tail page handling Muchun Song
2026-10-23  2:20     ` Lance Yang
2026-10-23  2:32       ` Muchun Song
2026-10-20 11:58   ` [PATCH 08/12] mm: hugetlb_vmemmap: move alloc_vmemmap_page_list() next to its free helper Muchun Song
2026-10-23  2:47     ` Lance Yang
2026-10-20 11:58   ` [PATCH 09/12] mm: hugetlb_vmemmap: make vmemmap optimization folio-oriented Muchun Song
2026-10-23  3:39     ` Lance Yang
2026-10-20 11:58   ` [PATCH 10/12] mm: hugetlb_vmemmap: make vmemmap restoration folio-oriented Muchun Song
2026-10-23  3:46     ` Lance Yang [this message]
2026-10-23  3:58       ` Muchun Song
2026-10-20 11:58   ` [PATCH 11/12] mm: hugetlb_vmemmap: unify vmemmap range restoration Muchun Song
2026-10-23  3:53     ` Lance Yang
2026-10-20 11:58   ` [PATCH 12/12] mm: hugetlb_vmemmap: make vmemmap PTE conversion folio-oriented Muchun Song
2026-10-22  3:52   ` [PATCH 02/12] mm: hugetlb_vmemmap: unify VMEMMAP_{SPLIT,REMAP}_NO_TLB_FLUSH Lance Yang

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=20261023034655.37422-1-lance.yang@linux.dev \
    --to=lance.yang@linux.dev \
    --cc=akpm@linux-foundation.org \
    --cc=david@kernel.org \
    --cc=jthoughton@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=muchun.song@linux.dev \
    --cc=osalvador@suse.de \
    --cc=qi.zheng@linux.dev \
    --cc=rppt@kernel.org \
    --cc=songmuchun@bytedance.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®