From: Lance Yang <lance.yang@linux.dev>
To: Dev Jain <dev.jain@arm.com>,
"David Hildenbrand (Arm)" <david@kernel.org>
Cc: akpm@linux-foundation.org, ljs@kernel.org, chrisl@kernel.org,
kasong@tencent.com, hughd@google.com, liam@infradead.org,
riel@surriel.com, vbabka@kernel.org, harry@kernel.org,
jannh@google.com, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, rppt@kernel.org, surenb@google.com,
mhocko@suse.com, qi.zheng@linux.dev, shakeel.butt@linux.dev,
baohua@kernel.org, axelrasmussen@google.com, yuanchu@google.com,
weixugc@google.com, shikemeng@huaweicloud.com, nphamcs@gmail.com,
bhe@redhat.com, youngjun.park@lge.com,
baolin.wang@linux.alibaba.com, pfalcato@suse.de,
ryan.roberts@arm.com, anshuman.khandual@arm.com
Subject: Re: [PATCH v4 02/12] mm/rmap: Add try_to_unmap_hugetlb_one
Date: Wed, 24 Jun 2026 14:58:17 +0800 [thread overview]
Message-ID: <5d11c940-a8b9-40d4-9b8f-aa2a9909724c@linux.dev> (raw)
In-Reply-To: <82474473-ff96-4ee5-bbe4-3d92c2f8cefa@arm.com>
On 2026/6/24 13:50, Dev Jain wrote:
>
>
> On 22/06/26 1:47 pm, David Hildenbrand (Arm) wrote:
>> On 6/22/26 10:14, Dev Jain wrote:
>>>
>>>
>>> On 22/06/26 1:43 pm, Dev Jain wrote:
>>>>
>>>>
>>>> On 18/06/26 3:31 pm, Lance Yang wrote:
>>>>>
>>>>>
>>>>>
>>>>> Yeah, looks like this was already there before the split. Should this
>>>>> be fixed separately?
>>>>
>>>> Same bug is there in try_to_migrate_one(), check_pte(), remove_migration_pte()
>>>> and prot_none_hugetlb_entry() :)
>>>>
>>>
>>> Lemme send a series for them. Main thing is identifying the fixes tag really.
>>
>> Thanks!
>
> I am confused w.r.t backport. So currently we just have to do this:
>
> - /*
> - * Handle PFN swap PTEs, such as device-exclusive ones, that
> - * actually map pages.
> - */
> - pteval = ptep_get(pvmw.pte);
> + address = pvmw.address;
> + if (folio_test_hugetlb(folio)) {
> + pteval = huge_ptep_get(mm, address, pvmw.pte);
> + } else {
> + /*
> + * Handle PFN swap PTEs, such as device-exclusive ones,
> + * that actually map pages.
> + */
> + pteval = ptep_get(pvmw.pte);
> + }
>
>
> At commit c7ab0d2fdc84, try_to_unmap_one() was converted to use the pvmw API. The
> code was:
>
> while (page_vma_mapped_walk(&pvmw)) {
> subpage = page - page_to_pfn(page) + pte_pfn(*pvmw.pte);
>
> Doing a plain dereference. Before this commit, the code was:
>
>
> pte_t *__page_check_address(struct page *page, struct mm_struct *mm,
> unsigned long address, spinlock_t **ptlp, int sync)
> {
> pmd_t *pmd;
> pte_t *pte;
> spinlock_t *ptl;
>
> if (unlikely(PageHuge(page))) {
> /* when pud is not present, pte will be NULL */
> pte = huge_pte_offset(mm, address);
> if (!pte)
> return NULL;
>
> ptl = huge_pte_lockptr(page_hstate(page), mm, pte);
> goto check;
> }
>
> pmd = mm_find_pmd(mm, address);
> if (!pmd)
> return NULL;
>
> pte = pte_offset_map(pmd, address);
> /* Make a quick check before getting the lock */
> if (!sync && !pte_present(*pte)) {
> pte_unmap(pte);
> return NULL;
> }
>
> ptl = pte_lockptr(mm, pmd);
> check:
> spin_lock(ptl);
> if (pte_present(*pte) && page_to_pfn(page) == pte_pfn(*pte)) {
> *ptlp = ptl;
> return pte;
> }
> pte_unmap_unlock(pte, ptl);
> return NULL;
> }
>
>
> This does pte_pfn(*pte), a plain dereference. I am not sure how back I need
> to go for the backport and do I need to post multiple patches for different
> stable versions.
Yeah ... looks old old old, not just c7ab0d2fdc84.
Stable backport looks kinda messy though. Mainline can probably stay
as one clean series, but stable might needs separate review per tree.
Going to be a pain ...
> And, it is crazy that the bug has stayed for this long and testing didn't find this.
> Perhaps no one bothered running hugetlb-read-hwpoison on PPC or s390. And for some
> reason those tests are in a category of "destructive" in run_vmtests.sh, requiring
> a command line option - and even that option was fixed just now in 3432cbb291aa!
Sigh ...
next prev parent reply other threads:[~2026-06-24 6:58 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-26 6:36 [PATCH v4 00/12] Optimize anonymous large folio unmapping Dev Jain
2026-05-26 6:36 ` [PATCH v4 01/12] mm/rmap: convert page -> folio for hwpoison checks Dev Jain
2026-06-09 13:44 ` David Hildenbrand (Arm)
2026-06-10 7:02 ` Dev Jain
2026-06-10 12:13 ` David Hildenbrand (Arm)
2026-05-26 6:36 ` [PATCH v4 02/12] mm/rmap: Add try_to_unmap_hugetlb_one Dev Jain
2026-06-09 14:16 ` David Hildenbrand (Arm)
2026-06-18 7:44 ` Lance Yang
2026-06-18 7:55 ` David Hildenbrand (Arm)
2026-06-18 9:09 ` Lance Yang
2026-06-18 9:43 ` David Hildenbrand (Arm)
2026-06-18 10:01 ` Lance Yang
2026-06-22 8:13 ` Dev Jain
2026-06-22 8:14 ` Lance Yang
2026-06-22 8:14 ` Dev Jain
2026-06-22 8:17 ` David Hildenbrand (Arm)
2026-06-24 5:50 ` Dev Jain
2026-06-24 6:58 ` Lance Yang [this message]
2026-06-23 8:40 ` Dev Jain
2026-06-23 11:49 ` David Hildenbrand (Arm)
2026-05-26 6:36 ` [PATCH v4 03/12] mm/rmap: refactor some code around lazyfree folio unmapping Dev Jain
2026-06-09 14:20 ` David Hildenbrand (Arm)
2026-06-23 8:42 ` Dev Jain
2026-05-26 6:36 ` [PATCH v4 04/12] mm/memory: Batch set uffd-wp markers during zapping Dev Jain
2026-06-16 13:43 ` David Hildenbrand (Arm)
2026-06-23 10:01 ` Dev Jain
2026-05-26 6:36 ` [PATCH v4 05/12] mm/rmap: batch unmap folios belonging to uffd-wp VMAs Dev Jain
2026-05-26 6:36 ` [PATCH v4 06/12] mm/swap: rename subpage->page in folio_dup_swap/folio_put_swap Dev Jain
2026-06-16 13:47 ` David Hildenbrand (Arm)
2026-05-26 6:36 ` [PATCH v4 07/12] mm/swapfile: Add batched version of folio_dup_swap Dev Jain
2026-06-16 13:50 ` David Hildenbrand (Arm)
2026-06-16 13:51 ` David Hildenbrand (Arm)
2026-05-26 6:36 ` [PATCH v4 08/12] mm/swapfile: Add batched version of folio_put_swap Dev Jain
2026-06-16 13:54 ` David Hildenbrand (Arm)
2026-06-23 10:03 ` Dev Jain
2026-05-26 6:36 ` [PATCH v4 09/12] mm/rmap: Add batched version of folio_try_share_anon_rmap_pte Dev Jain
2026-06-16 14:04 ` David Hildenbrand (Arm)
2026-06-23 10:05 ` Dev Jain
2026-05-26 6:36 ` [PATCH v4 10/12] mm/rmap: refactor anon folio unmap in try_to_unmap_one Dev Jain
2026-06-16 14:10 ` David Hildenbrand (Arm)
2026-06-23 11:01 ` Dev Jain
2026-05-26 6:36 ` [PATCH v4 11/12] mm/mprotect: drop 'sub' from page_anon_exclusive_sub_batch Dev Jain
2026-06-16 14:12 ` David Hildenbrand (Arm)
2026-06-23 11:02 ` Dev Jain
2026-05-26 6:36 ` [PATCH v4 12/12] mm/rmap: enable batch unmapping of anonymous folios Dev Jain
2026-05-28 16:50 ` [PATCH v4 00/12] Optimize anonymous large folio unmapping Dev Jain
2026-06-09 13:24 ` David Hildenbrand (Arm)
2026-06-09 14:18 ` David Hildenbrand (Arm)
2026-06-23 11:04 ` Dev Jain
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=5d11c940-a8b9-40d4-9b8f-aa2a9909724c@linux.dev \
--to=lance.yang@linux.dev \
--cc=akpm@linux-foundation.org \
--cc=anshuman.khandual@arm.com \
--cc=axelrasmussen@google.com \
--cc=baohua@kernel.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=bhe@redhat.com \
--cc=chrisl@kernel.org \
--cc=david@kernel.org \
--cc=dev.jain@arm.com \
--cc=harry@kernel.org \
--cc=hughd@google.com \
--cc=jannh@google.com \
--cc=kasong@tencent.com \
--cc=liam@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=mhocko@suse.com \
--cc=nphamcs@gmail.com \
--cc=pfalcato@suse.de \
--cc=qi.zheng@linux.dev \
--cc=riel@surriel.com \
--cc=rppt@kernel.org \
--cc=ryan.roberts@arm.com \
--cc=shakeel.butt@linux.dev \
--cc=shikemeng@huaweicloud.com \
--cc=surenb@google.com \
--cc=vbabka@kernel.org \
--cc=weixugc@google.com \
--cc=youngjun.park@lge.com \
--cc=yuanchu@google.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