From: sashiko-bot@kernel.org
To: mpenttil@redhat.com
Cc: intel-xe@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v14 05/12] mm/hmm: implement folio split for migrate needs in HMM pagewalk
Date: Tue, 22 Sep 2026 05:47:00 +0000 [thread overview]
Message-ID: <20260922054701.3B7461F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260922053421.4092027-6-mpenttil@redhat.com>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [High] mm: livelock in hmm_vma_walk_split() due to refcount elevation before trylock
- [High] mm: lock leak and VM_BUG_ON in hmm_vma_walk_split() for tail fault_page
- [Medium] mm: spurious migration failure in hmm_vma_walk_split() from TOCTOU split
--
commit ecf2b8c21903b70112c2f8a92121be600dc85ab2
Author: Mika Penttilä <mpenttil@redhat.com>
mm/hmm: implement folio split for migrate needs in HMM pagewalk
Implement the helper to split PMD size folios during pagewalk.
Splitting is needed if the start and end addresses are
not PMD aligned, or setting up pmd migration entry fails.
> diff --git a/mm/hmm.c b/mm/hmm.c
> index 4805c88347e67..e6469ef4ae6ad 100644
> --- a/mm/hmm.c
> +++ b/mm/hmm.c
> @@ -514,10 +514,51 @@ static int hmm_vma_walk_split(pmd_t *pmdp,
[ ... ]
> + folio = pmd_folio(*pmdp);
> + if (is_huge_zero_folio(folio)) {
> + spin_unlock(ptl);
> + split_huge_pmd(walk->vma, pmdp, addr);
> + } else {
> + folio_get(folio);
> + spin_unlock(ptl);
> +
> + if (folio != fault_folio) {
> + if (unlikely(!folio_trylock(folio))) {
[Severity: High]
Does this create a livelock under contention?
If multiple threads race in hmm_vma_walk_split(), Thread B might elevate the
refcount here before Thread A (which already holds the lock) calls
split_folio(). When Thread A calls split_folio(), the inflated refcount will
cause split_folio() to fail with -EAGAIN. Thread A returns -EAGAIN and drops
the lock, while Thread B fails folio_trylock() and returns -EBUSY. Both can
then retry infinitely.
Could we attempt folio_trylock() before elevating the refcount?
> + folio_put(folio);
> + ret = -EBUSY;
> + goto out;
> + }
> + } else {
> + folio_put(folio);
> + }
> +
> + ret = split_folio(folio);
[Severity: Medium]
Will this spuriously fail migration if the folio is split concurrently?
If another thread concurrently splits the THP during the lockless window
before we acquire the lock, split_folio() will return -EINVAL. Passing this
error up to hmm_vma_walk_pmd() aborts the pagewalk and marks the range with
HMM_PFN_ERROR instead of treating it as a condition to retry the walk with
the new PTEs.
[Severity: High]
Does this correctly handle cases where fault_page was a tail page?
If hmm_vma_walk_split() is called with migrate->fault_page as a tail page,
fault_folio is resolved as the head page. Before the split,
fault_folio == folio evaluates to true, so we bypass unlocking the folio on
the assumption the caller owns the lock.
However, split_folio() leaves the new order-0 tail pages unlocked.
When the caller subsequently uses the now order-0 fault_page and calls
folio_unlock(page_folio(fault_page)), it will crash with
VM_BUG_ON_FOLIO(!folio_test_locked(folio)) because the tail page is
unlocked. In addition, the original head page lock will be permanently
leaked.
> + if (fault_folio != folio) {
> + folio_unlock(folio);
> + folio_put(folio);
> + }
> + }
> +out:
> + return ret;
> +}
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260922053421.4092027-1-mpenttil@redhat.com?part=5
next prev parent reply other threads:[~2026-09-22 5:47 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-22 5:34 [PATCH 00/12] [PATCH v14 00/12] migrate on fault for device pages mpenttil
2026-09-22 5:34 ` [PATCH v14 01/12] mm/Kconfig: changes for " mpenttil
2026-09-22 5:44 ` sashiko-bot
2026-09-22 22:27 ` Balbir Singh
2026-09-23 5:42 ` Mika Penttilä
2026-09-22 5:34 ` [PATCH v14 02/12] mm: add helper to convert HMM pfn to migrate pfn mpenttil
2026-09-22 5:34 ` [PATCH v14 03/12] mm/hmm: preparations for HMM to participate in migration mpenttil
2026-09-22 5:49 ` sashiko-bot
2026-09-22 5:34 ` [PATCH v14 04/12] mm/hmm: do the plumbing " mpenttil
2026-09-22 5:50 ` sashiko-bot
2026-09-22 5:34 ` [PATCH v14 05/12] mm/hmm: implement folio split for migrate needs in HMM pagewalk mpenttil
2026-09-22 5:47 ` sashiko-bot [this message]
2026-09-22 5:34 ` [PATCH v14 06/12] mm/hmm: migrate collection in HMM pagewalk - pte level mpenttil
2026-09-22 5:47 ` sashiko-bot
2026-09-22 5:34 ` [PATCH v14 07/12] mm/hmm: migrate collection in HMM pagewalk - pmd level mpenttil
2026-09-22 5:50 ` sashiko-bot
2026-09-22 5:34 ` [PATCH v14 08/12] mm/hmm: add lazy MMU mode support for migration in HMM pagewalk mpenttil
2026-09-22 5:51 ` sashiko-bot
2026-09-22 5:34 ` [PATCH v14 09/12] mm/hmm: implement rollback for device page " mpenttil
2026-09-22 5:34 ` [PATCH v14 10/12] mm: enable device page migration from " mpenttil
2026-09-22 5:58 ` sashiko-bot
2026-09-22 5:34 ` [PATCH v14 11/12] lib/test_hmm: add a new testcase for the migrate on fault mpenttil
2026-09-22 6:09 ` sashiko-bot
2026-09-22 5:34 ` [PATCH v14 12/12] Documentation/mm/hmm: document migration through hmm_range_fault() mpenttil
2026-09-22 5:41 ` ✗ CI.checkpatch: warning for Migrate on fault for device pages (rev6) Patchwork
2026-09-22 5:43 ` ✓ CI.KUnit: success " Patchwork
2026-09-22 6:00 ` ✗ CI.checksparse: warning " Patchwork
2026-09-22 7:08 ` ✓ Xe.CI.BAT: success " Patchwork
2026-09-22 15:03 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-09-23 2:27 ` [PATCH 00/12] [PATCH v14 00/12] migrate on fault for device pages Andrew Morton
2026-09-23 5:29 ` Mika Penttilä
2026-09-23 21:19 ` Andrew Morton
2026-09-23 23:24 ` Jason Gunthorpe
2026-09-24 0:14 ` Mika Penttilä
2026-09-24 0:10 ` Mika Penttilä
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=20260922054701.3B7461F000FF@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=mpenttil@redhat.com \
--cc=sashiko-reviews@lists.linux.dev \
/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