From: Wei Yang <richard.weiyang@gmail.com>
To: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Wei Yang <richard.weiyang@gmail.com>,
akpm@linux-foundation.org, david@redhat.com, ziy@nvidia.com,
baolin.wang@linux.alibaba.com, Liam.Howlett@oracle.com,
npache@redhat.com, ryan.roberts@arm.com, dev.jain@arm.com,
baohua@kernel.org, lance.yang@linux.dev, linux-mm@kvack.org,
wang lian <lianux.mm@gmail.com>
Subject: Re: [Patch v3 2/4] mm/huge_memory: update folio stat after successful split
Date: Fri, 31 Oct 2025 00:46:59 +0000 [thread overview]
Message-ID: <20251031004659.xbtssliy6cfwxpo3@master> (raw)
In-Reply-To: <9d035053-d1ef-4284-9d27-fbc28cda26ad@lucifer.local>
On Fri, Oct 24, 2025 at 03:32:42PM +0100, Lorenzo Stoakes wrote:
[...]
>> @@ -3636,49 +3631,32 @@ static int __split_unmapped_folio(struct folio *folio, int new_order,
>> else {
>> xas_set_order(xas, folio->index, split_order);
>> xas_try_split(xas, folio, old_order);
>> - if (xas_error(xas)) {
>> - ret = xas_error(xas);
>> - stop_split = true;
>> - }
>> + if (xas_error(xas))
>> + return xas_error(xas);
>> }
>> }
>>
>> - if (!stop_split) {
>> - folio_split_memcg_refs(folio, old_order, split_order);
>> - split_page_owner(&folio->page, old_order, split_order);
>> - pgalloc_tag_split(folio, old_order, split_order);
>> -
>> - __split_folio_to_order(folio, old_order, split_order);
>> - }
>> + folio_split_memcg_refs(folio, old_order, split_order);
>> + split_page_owner(&folio->page, old_order, split_order);
>> + pgalloc_tag_split(folio, old_order, split_order);
>> + __split_folio_to_order(folio, old_order, split_order);
>>
>> + if (is_anon)
>> + mod_mthp_stat(old_order, MTHP_STAT_NR_ANON, -1);
>> /*
>> * Iterate through after-split folios and update folio stats.
>> - * But in buddy allocator like split, the folio
>> - * containing the specified page is skipped until its order
>> - * is new_order, since the folio will be worked on in next
>> - * iteration.
>> */
>> for (new_folio = folio; new_folio != end_folio; new_folio = next) {
>> next = folio_next(new_folio);
>> - /*
>> - * for buddy allocator like split, new_folio containing
>> - * @split_at page could be split again, thus do not
>> - * change stats yet. Wait until new_folio's order is
>> - * @new_order or stop_split is set to true by the above
>> - * xas_split() failure.
>> - */
>> - if (new_folio == page_folio(split_at)) {
>> + if (new_folio == page_folio(split_at))
>> folio = new_folio;
>> - if (split_order != new_order && !stop_split)
>
>OK I guess we don't need this as in !uniform_split case we use
>xas_set_order() to set the order, then try to split, and if an error arose
>we already would have handled, so split_order == new_order is guaranteed at
>this point, right?
>
Sorry for the late reply, I was on travel.
In non-uniform splitting, @split_order represents an intermediate step, with
@new_order as the final target size.
The check for split_order != new_order is necessary for the final split
iteration.
If this check is absent, the logic that updates folio statistics for the newly
split folios can be incorrectly bypassed when the !stop_split condition is
met.
Not sure I get your point correctly.
>> - continue;
>> - }
>> if (is_anon)
>> mod_mthp_stat(folio_order(new_folio),
>> MTHP_STAT_NR_ANON, 1);
>> }
>> }
>>
>> - return ret;
>> + return 0;
>> }
>>
>> bool non_uniform_split_supported(struct folio *folio, unsigned int new_order,
>> --
>> 2.34.1
>>
>>
--
Wei Yang
Help you, Help me
next prev parent reply other threads:[~2025-10-31 0:47 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-21 21:21 [Patch v3 0/4] mm/huge_memory: cleanup __split_unmapped_folio() Wei Yang
2025-10-21 21:21 ` [Patch v3 1/4] mm/huge_memory: avoid reinvoking folio_test_anon() Wei Yang
2025-10-24 14:08 ` Lorenzo Stoakes
2025-10-21 21:21 ` [Patch v3 2/4] mm/huge_memory: update folio stat after successful split Wei Yang
2025-10-22 20:26 ` David Hildenbrand
2025-10-22 20:31 ` Zi Yan
2025-10-23 1:26 ` wang lian
2025-10-24 14:32 ` Lorenzo Stoakes
2025-10-31 0:46 ` Wei Yang [this message]
2025-10-21 21:21 ` [Patch v3 3/4] mm/huge_memory: optimize and simplify folio stat update after split Wei Yang
2025-10-22 20:28 ` David Hildenbrand
2025-10-22 20:32 ` Zi Yan
2025-10-23 1:29 ` wang lian
2025-10-24 14:35 ` Lorenzo Stoakes
2025-10-21 21:21 ` [Patch v3 4/4] mm/huge_memory: optimize old_order derivation during folio splitting Wei Yang
2025-10-22 20:29 ` David Hildenbrand
2025-10-22 20:33 ` Zi Yan
2025-10-23 1:32 ` wang lian
2025-10-24 14:46 ` Lorenzo Stoakes
2025-10-24 15:29 ` Zi Yan
2025-10-24 15:33 ` Lorenzo Stoakes
2025-10-31 1:50 ` Wei Yang
2025-10-31 1:55 ` Zi Yan
2025-10-31 2:00 ` Wei 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=20251031004659.xbtssliy6cfwxpo3@master \
--to=richard.weiyang@gmail.com \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=baohua@kernel.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=david@redhat.com \
--cc=dev.jain@arm.com \
--cc=lance.yang@linux.dev \
--cc=lianux.mm@gmail.com \
--cc=linux-mm@kvack.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=npache@redhat.com \
--cc=ryan.roberts@arm.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox