From: "Zi Yan" <ziy@nvidia.com>
To: "Usama Arif" <usama.arif@linux.dev>,
"Andrew Morton" <akpm@linux-foundation.org>, <david@kernel.org>,
<chrisl@kernel.org>, <kasong@tencent.com>, <ljs@kernel.org>,
<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: [PATCH v8 15/30] mm: swap in PMD swap entries as whole THPs during swapoff
Date: Fri, 09 Oct 2026 15:09:09 -0400 [thread overview]
Message-ID: <DM0JLUOZEMBY.1B87PSVJZQKP5@nvidia.com> (raw)
In-Reply-To: <20261002095503.3585565-16-usama.arif@linux.dev>
On Fri Oct 2, 2026 at 5:52 AM EDT, Usama Arif wrote:
> swapoff walks every mm and faults every slot of the device back in.
> unuse_pte_range() only understands PTEs, so a PMD swap entry would never be
> found and swapoff would never complete.
>
> A PMD swap entry is a compact encoding for HPAGE_PMD_NR slots, not a
> promise that the swap cache holds one folio for them. Add
> swap_pmd_cache_lookup() to classify the covered range as empty, one
> PMD-sized folio, or already split, and unuse_pmd() to map the first two
> cases back in as one THP, preserving soft-dirty, exclusive and UFFD state.
>
> Everything else falls back to PTEs: a split cache, per-page zswap state, a
> failed PMD-order allocation or read, or a poisoned subpage. Check
> PageHWPoison on every subpage rather than the folio-level flag, which
> memory_failure() only sets after taking the folio lock.
>
> All the fallback reasons are observed without the PMD lock and possibly
> after sleeping, so they share one exit that re-checks the PMD is still the
> entry we were called for before splitting it. That exit also drops a folio
> that is not uptodate, or that has never been mapped, from the swap cache:
> the PTE path cannot re-read the first, and would add a single-page rmap to
> the second.
>
> Signed-off-by: Usama Arif <usama.arif@linux.dev>
> ---
> mm/internal.h | 16 ++++
> mm/swap.h | 17 +++++
> mm/swap_state.c | 44 +++++++++++
> mm/swapfile.c | 189 ++++++++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 266 insertions(+)
>
> diff --git a/mm/internal.h b/mm/internal.h
> index 05179c4b2090e..ec7f007bc2c0d 100644
> --- a/mm/internal.h
> +++ b/mm/internal.h
> @@ -24,6 +24,22 @@
>
> struct folio_batch;
>
> +/*
A high level description like below might be better.
Check every page in a folio for HWPoison flag. Return true if there is
any.
> + * Unlike folio_contain_hwpoisoned_page(), this does not rely on the folio-level
> + * PG_has_hwpoisoned, which memory_failure() only sets after taking the folio
> + * lock and so can lag a tail-page poison.
> + */
> +static inline bool folio_has_hwpoisoned_subpage(const struct folio *folio)
s/subpage/page, IIRC, we are moving away from subpage.
Maybe folio_has_any_hwpoisoned_page()?
> +{
> + long nr = folio_nr_pages(folio);
> + long i;
> +
> + for (i = 0; i < nr; i++)
> + if (PageHWPoison(folio_page(folio, i)))
> + return true;
> + return false;
> +}
> +
--
Best Regards,
Yan, Zi
next prev parent reply other threads:[~2026-10-09 19:09 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-02 9:52 [PATCH v8 00/30] mm: PMD-level swap entries for anonymous THPs Usama Arif
2026-10-02 9:52 ` [PATCH v8 01/30] mm: rename pmd_to_softleaf_folio() to pmd_softleaf_to_folio() Usama Arif
2026-10-02 9:52 ` [PATCH v8 02/30] arm64: mm: add PMD swap-exclusive helpers Usama Arif
2026-10-02 9:52 ` [PATCH v8 03/30] loongarch: " Usama Arif
2026-10-02 14:17 ` Huacai Chen
2026-10-02 9:52 ` [PATCH v8 04/30] powerpc: " Usama Arif
2026-10-05 4:55 ` LEROY Christophe
2026-10-02 9:52 ` [PATCH v8 05/30] riscv: " Usama Arif
2026-10-02 9:52 ` [PATCH v8 06/30] s390: " Usama Arif
2026-10-02 9:52 ` [PATCH v8 07/30] x86: " Usama Arif
2026-10-05 20:14 ` Zi Yan
2026-10-02 9:52 ` [PATCH v8 08/30] mm: recognize PMD swap entries in the softleaf layer Usama Arif
2026-10-08 2:06 ` Zi Yan
2026-10-02 9:52 ` [PATCH v8 09/30] mm/debug_vm_pgtable: test PMD swap-exclusive helpers Usama Arif
2026-10-08 2:09 ` Zi Yan
2026-10-02 9:52 ` [PATCH v8 10/30] mm: make PMD migration-entry splitting explicit Usama Arif
2026-10-08 2:53 ` Zi Yan
2026-10-02 9:52 ` [PATCH v8 11/30] mm: split PMD swap entries into PTE swap entries Usama Arif
2026-10-09 2:16 ` Zi Yan
2026-10-02 9:52 ` [PATCH v8 12/30] mm/swap: allow duplicating a range of " Usama Arif
2026-10-02 9:52 ` [PATCH v8 13/30] mm: handle PMD swap entries in fork path Usama Arif
2026-10-09 17:40 ` Zi Yan
2026-10-02 9:52 ` [PATCH v8 14/30] mm: zswap: reject high-order swap cache allocations backed by zswap Usama Arif
2026-10-05 20:18 ` Yosry Ahmed
2026-10-02 9:52 ` [PATCH v8 15/30] mm: swap in PMD swap entries as whole THPs during swapoff Usama Arif
2026-10-09 19:09 ` Zi Yan [this message]
2026-10-02 9:52 ` [PATCH v8 16/30] fs/proc: account PMD swap entries in smaps Usama Arif
2026-10-02 9:52 ` [PATCH v8 17/30] mm: handle soft-dirty and uffd-wp on PMD swap entries Usama Arif
2026-10-02 9:52 ` [PATCH v8 18/30] mm/hmm: fault PMD swap entries on demand Usama Arif
2026-10-02 9:52 ` [PATCH v8 19/30] mm: free PMD swap entries in zap_huge_pmd() Usama Arif
2026-10-02 9:52 ` [PATCH v8 20/30] mm/madvise: free PMD swap entries with MADV_FREE Usama Arif
2026-10-02 9:52 ` [PATCH v8 21/30] mm/madvise: skip PMD swap entries for MADV_COLD and MADV_PAGEOUT Usama Arif
2026-10-02 9:52 ` [PATCH v8 22/30] mm/madvise: keep PMD swap entries whole for MADV_GUARD_INSTALL/REMOVE Usama Arif
2026-10-02 9:52 ` [PATCH v8 23/30] mm/mincore: report PMD swap-cache residency Usama Arif
2026-10-02 9:52 ` [PATCH v8 24/30] mm/khugepaged: treat PMD swap entries as mapped THPs Usama Arif
2026-10-02 9:52 ` [PATCH v8 25/30] mm: handle PMD swap entries in MADV_WILLNEED Usama Arif
2026-10-02 9:52 ` [PATCH v8 26/30] mm: handle PMD swap entries in UFFDIO_MOVE Usama Arif
2026-10-04 8:19 ` Lance Yang
2026-10-02 9:52 ` [PATCH v8 27/30] mm: don't PTE-batch a swap-in over a hardware-poisoned subpage Usama Arif
2026-10-02 9:52 ` [PATCH v8 28/30] mm: handle PMD swap entry faults on swap-in Usama Arif
2026-10-04 10:19 ` Lance Yang
2026-10-02 9:52 ` [PATCH v8 29/30] mm: install PMD swap entries on swap-out Usama Arif
2026-10-02 9:52 ` [PATCH v8 30/30] selftests/mm: add PMD swap entry tests Usama Arif
2026-10-08 2:47 ` Luiz Capitulino
2026-10-02 14:28 ` [PATCH v8 00/30] mm: PMD-level swap entries for anonymous THPs David Hildenbrand (Arm)
2026-10-02 15:13 ` Zi Yan
2026-10-04 12:39 ` Usama Arif
2026-10-04 3:08 ` Lance Yang
2026-10-08 15:21 ` Luiz Capitulino
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=DM0JLUOZEMBY.1B87PSVJZQKP5@nvidia.com \
--to=ziy@nvidia.com \
--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=usama.arif@linux.dev \
--cc=vbabka@kernel.org \
--cc=willy@infradead.org \
--cc=ying.huang@linux.alibaba.com \
--cc=yosry@kernel.org \
--cc=youngjun.park@lge.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.