All of lore.kernel.org
 help / color / mirror / Atom feed
From: Usama Arif <usama.arif@linux.dev>
To: "David Hildenbrand (Arm)" <david@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	chrisl@kernel.org, kasong@tencent.com, ljs@kernel.org,
	ziy@nvidia.com, linux-mm@kvack.org
Cc: ying.huang@linux.alibaba.com, Baoquan He <baoquan.he@linux.dev>,
	willy@infradead.org, youngjun.park@lge.com, hannes@cmpxchg.org,
	riel@surriel.com, shakeel.butt@linux.dev, alex@ghiti.fr,
	kas@kernel.org, baohua@kernel.org, dev.jain@arm.com,
	baolin.wang@linux.alibaba.com, Nico Pache <nico.pache@linux.dev>,
	"Liam R. Howlett" <liam@infradead.org>,
	ryan.roberts@arm.com, Vlastimil Babka <vbabka@kernel.org>,
	lance.yang@linux.dev, linux-kernel@vger.kernel.org,
	nphamcs@gmail.com, shikemeng@huaweicloud.com, yosry@kernel.org,
	qi.zheng@linux.dev, luizcap@redhat.com, kernel-team@meta.com
Subject: Re: [RESEND v7 15/29] fs/proc: account PMD swap entries in smaps
Date: Fri, 25 Sep 2026 14:28:20 +0100	[thread overview]
Message-ID: <856c4436-8328-4561-a399-2df292c08b35@linux.dev> (raw)
In-Reply-To: <e375b500-be0c-4ad2-b59c-ce1d4d58bb10@kernel.org>



On 24/09/2026 21:37, David Hildenbrand (Arm) wrote:
> On 9/14/26 14:28, Usama Arif wrote:
>> smaps_pmd_entry() derives a page from a non-present PMD and gives up if it
>> cannot. A PMD swap entry carries no PFN, so a swapped-out THP is accounted
>> nowhere: its bytes show up in neither Swap nor SwapPss, and VmSwap silently
>> loses them.
>>
>> The slots of a PMD swap entry can have different swap reference counts, so
>> SwapPss has to be computed one slot at a time rather than divided once.
>> Factor that loop out of smaps_pte_entry() and call it from both levels,
>> then return early: a swapped-out THP is not resident and must not be added
>> to AnonHugePages or Rss.
>>
>> pagemap needs no equivalent change - it already emits PM_SWAP and
>> type | offset+idx for a PFN-less softleaf entry - but its
>> thp_migration_supported() gate answers a different question than the decode
>> requires, so use pmd_is_valid_softleaf() there instead.
>>
>> Signed-off-by: Usama Arif <usama.arif@linux.dev>
>> ---
>>  fs/proc/task_mmu.c | 42 ++++++++++++++++++++++++++++--------------
>>  1 file changed, 28 insertions(+), 14 deletions(-)
>>
>> diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
>> index 24425e2308951..aa3f4d54a8580 100644
>> --- a/fs/proc/task_mmu.c
>> +++ b/fs/proc/task_mmu.c
>> @@ -957,6 +957,27 @@ static void smaps_pte_hole_lookup(unsigned long addr, struct mm_walk *walk)
>>  #endif
>>  }
>>  
>> +static void smaps_account_swap(struct mem_size_stats *mss,
>> +			       softleaf_t entry, unsigned long size)
> 
> Wouldn't consuming nr_pages be more consistent with other functions that consume
> swap entry ranges?

Yes, done. mss->swap += nr_pages << PAGE_SHIFT; below in the next revision now.


> 
>> +{
>> +	unsigned long nr_pages = size >> PAGE_SHIFT;
>> +
>> +	mss->swap += size;
>> +	do {
>> +		int mapcount = swp_swapcount(entry);
> 
> While at it, can you please call that swapcount?

Done.

> 
>> +
>> +		if (mapcount >= 2) {
>> +			u64 pss_delta = (u64)PAGE_SIZE << PSS_SHIFT;
>> +
>> +			do_div(pss_delta, mapcount);
>> +			mss->swap_pss += pss_delta;
>> +		} else {
>> +			mss->swap_pss += (u64)PAGE_SIZE << PSS_SHIFT;
>> +		}
>> +		entry.val++;
>> +	} while (--nr_pages);
>> +}
> 
> 
> [...]
> 
>> @@ -2000,7 +2014,7 @@ static int pagemap_pmd_range_thp(pmd_t *pmdp, unsigned long addr,
>>  			flags |= PM_UFFD_WP;
>>  		if (pm->show_pfn)
>>  			frame = pmd_pfn(pmd) + idx;
>> -	} else if (thp_migration_supported()) {
>> +	} else if (pmd_is_valid_softleaf(pmd)) {
>>  		const softleaf_t entry = softleaf_from_pmd(pmd);
>>  		unsigned long offset;
>>  
> 
> Interesting, the function already seems to do what we want. Weird that we
> indicate PM_SWAP for migration entries ...


> 
> Also, are device_private PMD's handled correctly? *doubt*
> 
> [maybe there were patches, not sure]
> 

Not in smaps.  smaps_account() documents device-private
as fake-present and smaps_pte_entry() does it, but smaps_pmd_entry()
never did, so a PMD-mapped device-private folio got PSS charged
undivided and landed in shared_* even when mapped exactly once.
I have folded the fix for the next revision


  reply	other threads:[~2026-09-25 13:28 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-14 12:27 [RESEND v7 00/29] mm: PMD-level swap entries for anonymous THPs Usama Arif
2026-09-14 12:27 ` [RESEND v7 01/29] mm: rename pmd_to_softleaf_folio() to pmd_softleaf_to_folio() Usama Arif
2026-09-14 21:17   ` Barry Song
2026-09-15  3:06   ` Baoquan He
2026-09-15  3:34   ` Qi Zheng
2026-09-14 12:27 ` [RESEND v7 02/29] arm64: mm: add PMD swap-exclusive helpers Usama Arif
2026-09-18 21:11   ` David Hildenbrand (Arm)
2026-09-22 12:34     ` Usama Arif
2026-09-22 14:45       ` David Hildenbrand (Arm)
2026-09-22 15:03         ` Usama Arif
2026-09-14 12:27 ` [RESEND v7 03/29] loongarch: " Usama Arif
2026-09-18 21:18   ` David Hildenbrand (Arm)
2026-09-14 12:27 ` [RESEND v7 04/29] powerpc: " Usama Arif
2026-09-18 21:22   ` David Hildenbrand (Arm)
2026-09-22 12:48     ` Usama Arif
2026-09-14 12:27 ` [RESEND v7 05/29] riscv: " Usama Arif
2026-09-18 21:24   ` David Hildenbrand (Arm)
2026-09-14 12:27 ` [RESEND v7 06/29] s390: " Usama Arif
2026-09-18 21:41   ` David Hildenbrand (Arm)
2026-09-22 12:51     ` Usama Arif
2026-09-14 12:27 ` [RESEND v7 07/29] x86: " Usama Arif
2026-09-16 14:31   ` Kiryl Shutsemau
2026-09-22 12:52     ` Usama Arif
2026-09-18 21:43   ` David Hildenbrand (Arm)
2026-09-22 12:54     ` Usama Arif
2026-09-14 12:27 ` [RESEND v7 08/29] mm: recognize PMD swap entries in the softleaf layer Usama Arif
2026-09-16 14:47   ` Kiryl Shutsemau
2026-09-18 21:56   ` David Hildenbrand (Arm)
2026-09-22 13:08     ` Usama Arif
2026-09-22 14:48       ` David Hildenbrand (Arm)
2026-09-14 12:27 ` [RESEND v7 09/29] mm/debug_vm_pgtable: test PMD swap-exclusive helpers Usama Arif
2026-09-16 14:52   ` Kiryl Shutsemau
2026-09-18 21:57   ` David Hildenbrand (Arm)
2026-09-14 12:28 ` [RESEND v7 10/29] mm: make PMD migration-entry splitting explicit Usama Arif
2026-09-16 14:58   ` Kiryl Shutsemau
2026-09-18 22:10   ` David Hildenbrand (Arm)
2026-09-22 13:15     ` Usama Arif
2026-09-23 11:04   ` David Hildenbrand (Arm)
2026-09-24 16:12     ` Usama Arif
2026-09-14 12:28 ` [RESEND v7 11/29] mm: split PMD swap entries into PTE swap entries Usama Arif
2026-09-16 15:08   ` Kiryl Shutsemau
2026-09-22 11:46     ` David Hildenbrand (Arm)
2026-09-22 13:18       ` Usama Arif
2026-09-23 11:20   ` David Hildenbrand (Arm)
2026-09-24 17:34     ` Usama Arif
2026-09-24 19:57       ` David Hildenbrand (Arm)
2026-09-14 12:28 ` [RESEND v7 12/29] mm: handle PMD swap entries in fork path Usama Arif
2026-09-24 20:28   ` David Hildenbrand (Arm)
2026-09-25 11:16     ` Usama Arif
2026-09-14 12:28 ` [RESEND v7 13/29] mm: zswap: reject high-order swap cache allocations backed by zswap Usama Arif
2026-09-24 20:30   ` David Hildenbrand (Arm)
2026-09-14 12:28 ` [RESEND v7 14/29] mm: swap in PMD swap entries as whole THPs during swapoff Usama Arif
2026-09-14 12:28 ` [RESEND v7 15/29] fs/proc: account PMD swap entries in smaps Usama Arif
2026-09-24 20:37   ` David Hildenbrand (Arm)
2026-09-25 13:28     ` Usama Arif [this message]
2026-09-14 12:28 ` [RESEND v7 16/29] mm: handle soft-dirty and uffd-wp on PMD swap entries Usama Arif
2026-09-14 12:28 ` [RESEND v7 17/29] mm/hmm: fault PMD swap entries on demand Usama Arif
2026-09-14 12:28 ` [RESEND v7 18/29] mm: free PMD swap entries in zap_huge_pmd() Usama Arif
2026-09-14 12:28 ` [RESEND v7 19/29] mm/madvise: free PMD swap entries with MADV_FREE Usama Arif
2026-09-14 12:28 ` [RESEND v7 20/29] mm/madvise: skip PMD swap entries for MADV_COLD and MADV_PAGEOUT Usama Arif
2026-09-14 12:28 ` [RESEND v7 21/29] mm/madvise: keep PMD swap entries whole for MADV_GUARD_INSTALL/REMOVE Usama Arif
2026-09-14 12:28 ` [RESEND v7 22/29] mm/mincore: report PMD swap-cache residency Usama Arif
2026-09-14 12:28 ` [RESEND v7 23/29] mm/khugepaged: treat PMD swap entries as mapped THPs Usama Arif
2026-09-14 12:28 ` [RESEND v7 24/29] mm: handle PMD swap entries in MADV_WILLNEED Usama Arif
2026-09-14 12:28 ` [RESEND v7 25/29] mm: handle PMD swap entries in UFFDIO_MOVE Usama Arif
2026-09-14 12:28 ` [RESEND v7 26/29] mm: don't PTE-batch a swap-in over a hardware-poisoned subpage Usama Arif
2026-09-14 12:28 ` [RESEND v7 27/29] mm: handle PMD swap entry faults on swap-in Usama Arif
2026-09-14 12:28 ` [RESEND v7 28/29] mm: install PMD swap entries on swap-out Usama Arif
2026-09-14 12:28 ` [RESEND v7 29/29] selftests/mm: add PMD swap entry tests Usama Arif
2026-09-15  3:32 ` [RESEND v7 00/29] mm: PMD-level swap entries for anonymous THPs Andrew Morton
2026-09-15 14:09   ` Usama Arif
2026-09-16  0:00     ` Andrew Morton
2026-09-16 10:22       ` Usama Arif

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=856c4436-8328-4561-a399-2df292c08b35@linux.dev \
    --to=usama.arif@linux.dev \
    --cc=akpm@linux-foundation.org \
    --cc=alex@ghiti.fr \
    --cc=baohua@kernel.org \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=baoquan.he@linux.dev \
    --cc=chrisl@kernel.org \
    --cc=david@kernel.org \
    --cc=dev.jain@arm.com \
    --cc=hannes@cmpxchg.org \
    --cc=kas@kernel.org \
    --cc=kasong@tencent.com \
    --cc=kernel-team@meta.com \
    --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=luizcap@redhat.com \
    --cc=nico.pache@linux.dev \
    --cc=nphamcs@gmail.com \
    --cc=qi.zheng@linux.dev \
    --cc=riel@surriel.com \
    --cc=ryan.roberts@arm.com \
    --cc=shakeel.butt@linux.dev \
    --cc=shikemeng@huaweicloud.com \
    --cc=vbabka@kernel.org \
    --cc=willy@infradead.org \
    --cc=ying.huang@linux.alibaba.com \
    --cc=yosry@kernel.org \
    --cc=youngjun.park@lge.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 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.