Align with drm_gpusvm_get_pages() (drm_gpusvm.c line 1416, 1440) which
refreshes notifier_seq via mmu_interval_read_begin() on each retry
iteration. Without this, a stale sequence number causes
hmm_range_fault() to perpetually return -EBUSY, leading to an infinite
retry loop at the caller level.
Fixes: 144ba981783f ("drm/amdgpu: fix amdgpu_hmm_range_get_pages")
Signed-off-by: Honglei Huang <[email protected]>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c
index 5d72878c8..ec0fe9044 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c
@@ -192,7 +192,6 @@ int amdgpu_hmm_range_get_pages(struct mmu_interval_notifier
*notifier,
end = start + npages * PAGE_SIZE;
hmm_range->dev_private_owner = owner;
- hmm_range->notifier_seq = mmu_interval_read_begin(notifier);
do {
hmm_range->end = min(hmm_range->start + max_bytes, end);
@@ -202,6 +201,7 @@ int amdgpu_hmm_range_get_pages(struct mmu_interval_notifier
*notifier,
timeout = jiffies + msecs_to_jiffies(HMM_RANGE_DEFAULT_TIMEOUT);
retry:
+ hmm_range->notifier_seq = mmu_interval_read_begin(notifier);
r = hmm_range_fault(hmm_range);
if (unlikely(r)) {
if (r == -EBUSY && !time_after(jiffies, timeout))
--
2.34.1