From: Muchun Song <muchun.song@linux.dev>
To: Lance Yang <lance.yang@linux.dev>
Cc: osalvador@suse.de, akpm@linux-foundation.org, rppt@kernel.org,
qi.zheng@linux.dev, jthoughton@google.com, david@kernel.org,
songmuchun@bytedance.com, 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:58:50 +0800 [thread overview]
Message-ID: <8570a18a-2ed3-4b31-98ae-c7f2a46eda44@linux.dev> (raw)
In-Reply-To: <20261023034655.37422-1-lance.yang@linux.dev>
On 2026/10/23 11:46, Lance Yang wrote:
> 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?
You're really thorough. That's actually something on my follow-up series,
so I didn't include it in the current one.
>
> Otherwise, LGTM!
>
> Reviewed-by: Lance Yang <lance.yang@linux.dev>
Thanks.
next prev parent reply other threads:[~2026-10-23 3:58 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
2026-10-23 3:58 ` Muchun Song [this message]
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=8570a18a-2ed3-4b31-98ae-c7f2a46eda44@linux.dev \
--to=muchun.song@linux.dev \
--cc=akpm@linux-foundation.org \
--cc=david@kernel.org \
--cc=jthoughton@google.com \
--cc=lance.yang@linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--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®