All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Jose A. Perez de Azpillaga" <azpijr@gmail.com>
To: sashiko-reviews@lists.linux.dev,
	David Hildenbrand <david@kernel.org>, Zi Yan <ziy@nvidia.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Lorenzo Stoakes <ljs@kernel.org>
Cc: Baolin Wang <baolin.wang@linux.alibaba.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>,
	Kiryl Shutsemau <kas@kernel.org>, Rik van Riel <riel@surriel.com>,
	Vlastimil Babka <vbabka@kernel.org>, Harry Yoo <harry@kernel.org>,
	Jann Horn <jannh@google.com>,
	linux-mm@kvack.org, Joanne Koong <joannelkoong@gmail.com>
Subject: Re: [RFC PATCH 2/2] mm/huge_memory: detect partially mapped shared folios without per-page mapcounts
Date: Thu, 12 Nov 2026 13:43:56 +0100	[thread overview]
Message-ID: <dee35546-3f5d-4fd3-83cb-dd135e726e09@gmail.com> (raw)
In-Reply-To: <sashiko-outbox-211031@kernel.org>

On 11/12/26 12:36 PM, sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 1 potential
> issue to consider:
> - [Medium] mm/huge_memory: deferred_split_scan() runs PMD
>   thp_underused() on mTHPs
> --
> 
> commit 2f9d38ddfb170d3656f9925bef1e82e9b94ecc37
> Author: Jose A. Perez de Azpillaga <azpijr@gmail.com>
> 
> mm/huge_memory: detect partially mapped shared folios without per-page mapcounts
> 
> This commit queues shared anonymous folios onto the deferred split list
> without setting PG_partially_mapped when CONFIG_NO_PAGE_MAPCOUNT cannot tell
> at unmap time whether all subpages remain mapped, and walks the rmap in
> deferred_split_scan() to check them.
> 
>> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
>> index 8c4a69c797edd..f80fa028dd340 100644
>> --- a/mm/huge_memory.c
>> +++ b/mm/huge_memory.c
> 
> [ ... ]
> 
>> @@ -4744,6 +4811,15 @@ static unsigned long deferred_split_scan(struct shrinker *shrink,
>>  		list_lru_unlock_irq(lru);
>>  		rcu_read_unlock();
>>  
>> +		if (!folio_test_partially_mapped(folio) &&
>> +		    folio_needs_mapped_check(folio)) {
>> +			if (!folio_trylock(folio))
>> +				goto requeue;
>> +			/* Sets PG_partially_mapped and puts it back on the queue. */
>> +			if (folio_mapped_shared_partially(folio))
>> +				deferred_split_folio(folio, true);
>> +			folio_unlock(folio);
>> +		}
>>  		if (!folio_test_partially_mapped(folio)) {
>>  			/*
>>  			 * See try_to_map_unused_to_zeropage(): we cannot
>> @@ -4752,7 +4828,7 @@ static unsigned long deferred_split_scan(struct shrinker *shrink,
>>  			 */
>>  			if (folio_test_mlocked(folio))
>>  				goto next;
>> -			underused = thp_underused(folio);
>> +			underused = split_underused_thp && thp_underused(folio);
>>  			if (!underused)
>>  				goto next;
>>  		}
> 
> [Severity: Medium]
> Can deferred_split_scan() now call thp_underused() on a sub-PMD mTHP?
> 
> Previously, only map_anon_folio_pmd_nopf() queued folios with
> partially_mapped == false, so any folio reaching the !folio_test_partially_mapped(folio)
> branch was PMD-sized.  __folio_remove_rmap() now queues shared anonymous
> folios of any order > 1 with partially_mapped == false when a partial unmap in
> one process leaves the folio fully mapped in another.  When
> folio_mapped_shared_partially() returns false for such a sub-PMD mTHP,
> execution falls through to thp_underused(folio):
> 
> mm/huge_memory.c:thp_underused() {
>     ...
> 	for (i = 0; i < folio_nr_pages(folio); i++) {
> 		if (pages_identical(folio_page(folio, i), ZERO_PAGE(0))) {
> 			if (++num_zero_pages > khugepaged_max_ptes_none)
> 				return true;
> 		} else {
> 			if (++num_filled_pages >= HPAGE_PMD_NR - khugepaged_max_ptes_none)
> 				return false;
> 		}
> 	}
>     ...
> }
> 
> Because thp_underused() compares against unscaled HPAGE_PMD_NR and
> khugepaged_max_ptes_none thresholds, any khugepaged_max_ptes_none below
> HPAGE_PMD_NR - 1 causes reclaim to scan subpages with pages_identical() even
> when neither threshold can be reached, or to split fully mapped sub-PMD mTHPs
> and increment THP_UNDERUSED_SPLIT_PAGE.  Checking folio_test_pmd_mappable(folio)
> before calling thp_underused(folio) would avoid this.
> 

okay, seems correct. I'll make thp_underused() return false for folios
that are not PMD-mappable in v2 then.

-- 
cheers,
jose a. p-a


  reply	other threads:[~2026-11-12 12:44 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-11 11:31 [RFC PATCH 0/2] mm/huge_memory: find partially mapped shared folios with NO_PAGE_MAPCOUNT Jose A. Perez de Azpillaga
2026-11-11 11:31 ` [RFC PATCH 1/2] mm/huge_memory: check split_underused_thp in the caller of deferred_split_folio() Jose A. Perez de Azpillaga
2026-11-11 11:31 ` [RFC PATCH 2/2] mm/huge_memory: detect partially mapped shared folios without per-page mapcounts Jose A. Perez de Azpillaga
2026-11-12 11:36   ` sashiko-bot
2026-11-12 12:43     ` Jose A. Perez de Azpillaga [this message]
2026-11-12 12:46 ` [RFC PATCH 0/2] mm/huge_memory: find partially mapped shared folios with NO_PAGE_MAPCOUNT David Hildenbrand (Arm)
2026-11-12 13:03   ` Jose A. Perez de Azpillaga

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=dee35546-3f5d-4fd3-83cb-dd135e726e09@gmail.com \
    --to=azpijr@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=baohua@kernel.org \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=david@kernel.org \
    --cc=dev.jain@arm.com \
    --cc=harry@kernel.org \
    --cc=jannh@google.com \
    --cc=joannelkoong@gmail.com \
    --cc=kas@kernel.org \
    --cc=lance.yang@linux.dev \
    --cc=liam@infradead.org \
    --cc=linux-mm@kvack.org \
    --cc=ljs@kernel.org \
    --cc=nico.pache@linux.dev \
    --cc=riel@surriel.com \
    --cc=ryan.roberts@arm.com \
    --cc=sashiko-reviews@lists.linux.dev \
    --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.