From: Matthew Brost <matthew.brost@intel.com>
To: Stanislav Kinsburskii <skinsburskii@gmail.com>
Cc: <airlied@gmail.com>, <akhilesh@ee.iitb.ac.in>,
<akpm@linux-foundation.org>, <corbet@lwn.net>, <dakr@kernel.org>,
<david@kernel.org>, <decui@microsoft.com>,
<haiyangz@microsoft.com>, <jgg@ziepe.ca>, <kees@kernel.org>,
<kys@microsoft.com>, <leon@kernel.org>, <liam@infradead.org>,
<lizhi.hou@amd.com>, <ljs@kernel.org>, <longli@microsoft.com>,
<lyude@redhat.com>, <maarten.lankhorst@linux.intel.com>,
<mamin506@gmail.com>, <mhocko@suse.com>, <mripard@kernel.org>,
<nouveau@lists.freedesktop.org>, <ogabbay@kernel.org>,
<oleg@redhat.com>, <rppt@kernel.org>, <shuah@kernel.org>,
<simona@ffwll.ch>, <skhan@linuxfoundation.org>,
<surenb@google.com>, <tzimmermann@suse.de>, <vbabka@kernel.org>,
<wei.liu@kernel.org>, <dri-devel@lists.freedesktop.org>,
<linux-mm@kvack.org>, <linux-doc@vger.kernel.org>,
<linux-hyperv@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-kselftest@vger.kernel.org>, <linux-rdma@vger.kernel.org>
Subject: Re: [PATCH v8 8/8] drm/gpusvm: Use hmm_range_fault_unlocked_timeout() for range faults
Date: Mon, 13 Jul 2026 09:30:35 -0700 [thread overview]
Message-ID: <alUSq0o7CC2Pnr+H@gsse-cloud1.jf.intel.com> (raw)
In-Reply-To: <178371883977.900500.2198446134676328631.stgit@skinsburskii>
On Fri, Jul 10, 2026 at 02:27:19PM -0700, Stanislav Kinsburskii wrote:
Please send series like this to intel-xe@lists.freedesktop.org list too
as this will trigger our CI which expercises the change paths changed in
this series.
> Several GPU SVM paths take mmap_read_lock() only to call hmm_range_fault(),
> then retry -EBUSY until HMM_RANGE_DEFAULT_TIMEOUT expires. Those paths use
> MMU interval notifiers whose mm matches the mm that was locked for the HMM
> fault.
>
> Use hmm_range_fault_unlocked_timeout() for those faults and pass the
> remaining retry budget to HMM. The helper owns mmap_lock acquisition and
> refreshes range->notifier_seq internally for each retry, while GPU SVM
> keeps its existing driver-lock validation with mmu_interval_read_retry()
> after a successful fault.
>
> Leave drm_gpusvm_check_pages() on hmm_range_fault() because that path is
> called with the mmap lock already held by its caller.
>
> Signed-off-by: Stanislav Kinsburskii <skinsburskii@gmail.com>
> Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
> ---
> drivers/gpu/drm/drm_gpusvm.c | 52 ++++++------------------------------------
> 1 file changed, 7 insertions(+), 45 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_gpusvm.c b/drivers/gpu/drm/drm_gpusvm.c
> index 958cb605aedd..6b7a6eaebcd9 100644
> --- a/drivers/gpu/drm/drm_gpusvm.c
> +++ b/drivers/gpu/drm/drm_gpusvm.c
> @@ -788,22 +788,8 @@ enum drm_gpusvm_scan_result drm_gpusvm_scan_mm(struct drm_gpusvm_range *range,
> hmm_range.hmm_pfns = pfns;
>
> retry:
> - hmm_range.notifier_seq = mmu_interval_read_begin(notifier);
> - mmap_read_lock(range->gpusvm->mm);
> -
> - while (true) {
> - err = hmm_range_fault(&hmm_range);
> - if (err == -EBUSY) {
> - if (time_after(jiffies, timeout))
> - break;
> -
> - hmm_range.notifier_seq =
> - mmu_interval_read_begin(notifier);
> - continue;
> - }
> - break;
> - }
> - mmap_read_unlock(range->gpusvm->mm);
> + err = hmm_range_fault_unlocked_timeout(&hmm_range,
> + max(timeout - jiffies, 1L));
> if (err)
> goto err_free;
>
> @@ -1439,21 +1425,8 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,
> }
>
> hmm_range.hmm_pfns = pfns;
> - while (true) {
> - mmap_read_lock(mm);
> - err = hmm_range_fault(&hmm_range);
> - mmap_read_unlock(mm);
> -
> - if (err == -EBUSY) {
> - if (time_after(jiffies, timeout))
> - break;
> -
> - hmm_range.notifier_seq =
> - mmu_interval_read_begin(notifier);
> - continue;
> - }
> - break;
> - }
> + err = hmm_range_fault_unlocked_timeout(&hmm_range,
> + max_t(long, timeout - jiffies, 1));
Unaligned indentation.
So I'd write this like this to avoid weird wraps:
ctimeout = max_t(long, timeout - jiffies, 1));
err = hmm_range_fault_unlocked_timeout(&hmm_range, ctimeout);
> mmput(mm);
> if (err)
> goto err_free;
> @@ -1736,24 +1709,13 @@ int drm_gpusvm_range_evict(struct drm_gpusvm *gpusvm,
> return -ENOMEM;
>
> hmm_range.hmm_pfns = pfns;
> - while (!time_after(jiffies, timeout)) {
> - hmm_range.notifier_seq = mmu_interval_read_begin(notifier);
> - if (time_after(jiffies, timeout)) {
> - err = -ETIME;
> - break;
> - }
> -
> - mmap_read_lock(mm);
> - err = hmm_range_fault(&hmm_range);
> - mmap_read_unlock(mm);
> - if (err != -EBUSY)
> - break;
> - }
> + err = hmm_range_fault_unlocked_timeout(&hmm_range,
> + max_t(long, timeout - jiffies, 1));
>
Same here.
Nits, aside LGTM.
Matt
> kvfree(pfns);
> mmput(mm);
>
> - return err;
> + return err == -EBUSY ? -ETIME : err;
> }
> EXPORT_SYMBOL_GPL(drm_gpusvm_range_evict);
>
>
>
WARNING: multiple messages have this Message-ID (diff)
From: Matthew Brost <matthew.brost@intel.com>
To: Stanislav Kinsburskii <skinsburskii@gmail.com>
Cc: akhilesh@ee.iitb.ac.in, akpm@linux-foundation.org,
corbet@lwn.net, dakr@kernel.org, david@kernel.org,
decui@microsoft.com, haiyangz@microsoft.com, jgg@ziepe.ca,
kees@kernel.org, kys@microsoft.com, leon@kernel.org,
liam@infradead.org, lizhi.hou@amd.com, ljs@kernel.org,
longli@microsoft.com, maarten.lankhorst@linux.intel.com,
mamin506@gmail.com, mhocko@suse.com, mripard@kernel.org,
nouveau@lists.freedesktop.org, ogabbay@kernel.org,
oleg@redhat.com, rppt@kernel.org, shuah@kernel.org,
simona@ffwll.ch, skhan@linuxfoundation.org, surenb@google.com,
vbabka@kernel.org, wei.liu@kernel.org,
dri-devel@lists.freedesktop.org, linux-mm@kvack.org,
linux-doc@vger.kernel.org, linux-hyperv@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org,
linux-rdma@vger.kernel.org
Subject: Re: [PATCH v8 8/8] drm/gpusvm: Use hmm_range_fault_unlocked_timeout() for range faults
Date: Mon, 13 Jul 2026 09:30:35 -0700 [thread overview]
Message-ID: <alUSq0o7CC2Pnr+H@gsse-cloud1.jf.intel.com> (raw)
In-Reply-To: <178371883977.900500.2198446134676328631.stgit@skinsburskii>
On Fri, Jul 10, 2026 at 02:27:19PM -0700, Stanislav Kinsburskii wrote:
Please send series like this to intel-xe@lists.freedesktop.org list too
as this will trigger our CI which expercises the change paths changed in
this series.
> Several GPU SVM paths take mmap_read_lock() only to call hmm_range_fault(),
> then retry -EBUSY until HMM_RANGE_DEFAULT_TIMEOUT expires. Those paths use
> MMU interval notifiers whose mm matches the mm that was locked for the HMM
> fault.
>
> Use hmm_range_fault_unlocked_timeout() for those faults and pass the
> remaining retry budget to HMM. The helper owns mmap_lock acquisition and
> refreshes range->notifier_seq internally for each retry, while GPU SVM
> keeps its existing driver-lock validation with mmu_interval_read_retry()
> after a successful fault.
>
> Leave drm_gpusvm_check_pages() on hmm_range_fault() because that path is
> called with the mmap lock already held by its caller.
>
> Signed-off-by: Stanislav Kinsburskii <skinsburskii@gmail.com>
> Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
> ---
> drivers/gpu/drm/drm_gpusvm.c | 52 ++++++------------------------------------
> 1 file changed, 7 insertions(+), 45 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_gpusvm.c b/drivers/gpu/drm/drm_gpusvm.c
> index 958cb605aedd..6b7a6eaebcd9 100644
> --- a/drivers/gpu/drm/drm_gpusvm.c
> +++ b/drivers/gpu/drm/drm_gpusvm.c
> @@ -788,22 +788,8 @@ enum drm_gpusvm_scan_result drm_gpusvm_scan_mm(struct drm_gpusvm_range *range,
> hmm_range.hmm_pfns = pfns;
>
> retry:
> - hmm_range.notifier_seq = mmu_interval_read_begin(notifier);
> - mmap_read_lock(range->gpusvm->mm);
> -
> - while (true) {
> - err = hmm_range_fault(&hmm_range);
> - if (err == -EBUSY) {
> - if (time_after(jiffies, timeout))
> - break;
> -
> - hmm_range.notifier_seq =
> - mmu_interval_read_begin(notifier);
> - continue;
> - }
> - break;
> - }
> - mmap_read_unlock(range->gpusvm->mm);
> + err = hmm_range_fault_unlocked_timeout(&hmm_range,
> + max(timeout - jiffies, 1L));
> if (err)
> goto err_free;
>
> @@ -1439,21 +1425,8 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,
> }
>
> hmm_range.hmm_pfns = pfns;
> - while (true) {
> - mmap_read_lock(mm);
> - err = hmm_range_fault(&hmm_range);
> - mmap_read_unlock(mm);
> -
> - if (err == -EBUSY) {
> - if (time_after(jiffies, timeout))
> - break;
> -
> - hmm_range.notifier_seq =
> - mmu_interval_read_begin(notifier);
> - continue;
> - }
> - break;
> - }
> + err = hmm_range_fault_unlocked_timeout(&hmm_range,
> + max_t(long, timeout - jiffies, 1));
Unaligned indentation.
So I'd write this like this to avoid weird wraps:
ctimeout = max_t(long, timeout - jiffies, 1));
err = hmm_range_fault_unlocked_timeout(&hmm_range, ctimeout);
> mmput(mm);
> if (err)
> goto err_free;
> @@ -1736,24 +1709,13 @@ int drm_gpusvm_range_evict(struct drm_gpusvm *gpusvm,
> return -ENOMEM;
>
> hmm_range.hmm_pfns = pfns;
> - while (!time_after(jiffies, timeout)) {
> - hmm_range.notifier_seq = mmu_interval_read_begin(notifier);
> - if (time_after(jiffies, timeout)) {
> - err = -ETIME;
> - break;
> - }
> -
> - mmap_read_lock(mm);
> - err = hmm_range_fault(&hmm_range);
> - mmap_read_unlock(mm);
> - if (err != -EBUSY)
> - break;
> - }
> + err = hmm_range_fault_unlocked_timeout(&hmm_range,
> + max_t(long, timeout - jiffies, 1));
>
Same here.
Nits, aside LGTM.
Matt
> kvfree(pfns);
> mmput(mm);
>
> - return err;
> + return err == -EBUSY ? -ETIME : err;
> }
> EXPORT_SYMBOL_GPL(drm_gpusvm_range_evict);
>
>
>
next prev parent reply other threads:[~2026-07-13 16:30 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-10 21:26 [PATCH v8 0/8] mm/hmm: Add mmap lock-drop support for userfaultfd-backed mappings Stanislav Kinsburskii
2026-07-10 21:26 ` [PATCH v8 1/8] mm/hmm: move page fault handling out of walk callbacks Stanislav Kinsburskii
2026-07-10 21:26 ` [PATCH v8 2/8] mm/hmm: add hmm_range_fault_unlocked_timeout() for mmap lock-drop support Stanislav Kinsburskii
2026-07-10 22:12 ` Andrew Morton
2026-07-10 22:12 ` Andrew Morton
2026-07-11 3:09 ` Stanislav Kinsburskii
2026-07-11 3:09 ` Stanislav Kinsburskii
2026-07-10 21:26 ` [PATCH v8 3/8] selftests/mm: add HMM test for mmap lock-dropping faults Stanislav Kinsburskii
2026-07-10 21:26 ` [PATCH v8 4/8] mshv: Use hmm_range_fault_unlocked_timeout() for region faults Stanislav Kinsburskii
2026-07-10 22:12 ` Andrew Morton
2026-07-10 22:12 ` Andrew Morton
2026-07-11 3:14 ` Stanislav Kinsburskii
2026-07-11 3:14 ` Stanislav Kinsburskii
2026-07-11 5:46 ` Andrew Morton
2026-07-11 5:46 ` Andrew Morton
2026-07-13 16:56 ` Stanislav Kinsburskii
2026-07-13 16:56 ` Stanislav Kinsburskii
2026-07-13 14:55 ` Jason Gunthorpe
2026-07-13 14:55 ` Jason Gunthorpe
2026-07-10 21:26 ` [PATCH v8 5/8] drm/nouveau: Use hmm_range_fault_unlocked_timeout() for SVM faults Stanislav Kinsburskii
2026-07-10 22:12 ` Andrew Morton
2026-07-10 22:12 ` Andrew Morton
2026-07-11 3:16 ` Stanislav Kinsburskii
2026-07-11 3:16 ` Stanislav Kinsburskii
2026-07-11 5:48 ` Andrew Morton
2026-07-11 5:48 ` Andrew Morton
2026-07-13 16:59 ` Stanislav Kinsburskii
2026-07-13 16:59 ` Stanislav Kinsburskii
2026-07-13 23:18 ` Andrew Morton
2026-07-13 23:18 ` Andrew Morton
2026-07-10 21:27 ` [PATCH v8 6/8] RDMA/umem: Use hmm_range_fault_unlocked_timeout() for ODP faults Stanislav Kinsburskii
2026-07-10 21:27 ` [PATCH v8 7/8] accel/amdxdna: Use hmm_range_fault_unlocked_timeout() for range population Stanislav Kinsburskii
2026-07-10 22:12 ` Andrew Morton
2026-07-10 22:12 ` Andrew Morton
2026-07-11 3:19 ` Stanislav Kinsburskii
2026-07-11 3:19 ` Stanislav Kinsburskii
2026-07-10 21:27 ` [PATCH v8 8/8] drm/gpusvm: Use hmm_range_fault_unlocked_timeout() for range faults Stanislav Kinsburskii
2026-07-10 22:12 ` Andrew Morton
2026-07-10 22:12 ` Andrew Morton
2026-07-13 16:30 ` Matthew Brost [this message]
2026-07-13 16:30 ` Matthew Brost
2026-07-13 17:01 ` Stanislav Kinsburskii
2026-07-13 17:01 ` Stanislav Kinsburskii
2026-07-10 22:11 ` [PATCH v8 0/8] mm/hmm: Add mmap lock-drop support for userfaultfd-backed mappings Andrew Morton
2026-07-10 22:11 ` Andrew Morton
2026-07-11 3:22 ` Stanislav Kinsburskii
2026-07-11 3:22 ` Stanislav Kinsburskii
2026-07-11 5:49 ` Andrew Morton
2026-07-11 5:49 ` Andrew Morton
2026-07-13 20:57 ` Stanislav Kinsburskii
2026-07-13 20:57 ` Stanislav Kinsburskii
2026-07-13 22:45 ` Andrew Morton
2026-07-13 22:45 ` Andrew Morton
2026-07-14 16:09 ` Stanislav Kinsburskii
2026-07-14 16:09 ` Stanislav Kinsburskii
2026-07-14 17:57 ` Andrew Morton
2026-07-14 17:57 ` Andrew Morton
2026-07-14 20:05 ` Stanislav Kinsburskii
2026-07-14 20:05 ` Stanislav Kinsburskii
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=alUSq0o7CC2Pnr+H@gsse-cloud1.jf.intel.com \
--to=matthew.brost@intel.com \
--cc=airlied@gmail.com \
--cc=akhilesh@ee.iitb.ac.in \
--cc=akpm@linux-foundation.org \
--cc=corbet@lwn.net \
--cc=dakr@kernel.org \
--cc=david@kernel.org \
--cc=decui@microsoft.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=haiyangz@microsoft.com \
--cc=jgg@ziepe.ca \
--cc=kees@kernel.org \
--cc=kys@microsoft.com \
--cc=leon@kernel.org \
--cc=liam@infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-rdma@vger.kernel.org \
--cc=lizhi.hou@amd.com \
--cc=ljs@kernel.org \
--cc=longli@microsoft.com \
--cc=lyude@redhat.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mamin506@gmail.com \
--cc=mhocko@suse.com \
--cc=mripard@kernel.org \
--cc=nouveau@lists.freedesktop.org \
--cc=ogabbay@kernel.org \
--cc=oleg@redhat.com \
--cc=rppt@kernel.org \
--cc=shuah@kernel.org \
--cc=simona@ffwll.ch \
--cc=skhan@linuxfoundation.org \
--cc=skinsburskii@gmail.com \
--cc=surenb@google.com \
--cc=tzimmermann@suse.de \
--cc=vbabka@kernel.org \
--cc=wei.liu@kernel.org \
/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.