On 3/24/26 6:40 PM, Alex Deucher wrote:
Applied.  Thanks!

Hi @Alex

Thank you for applying this patch.


I am planning to send the next version for PATCH 1/6. For the
other patches that have already received Reviewed-by tags,
would you prefer to pick them from this series, or should I
include them again in the next version?

-Donet



Alex

On Mon, Mar 23, 2026 at 9:04 AM Christian König
<[email protected]> wrote:
On 3/23/26 05:28, Donet Tom wrote:
During a GPU page fault, the driver restores the SVM range and then maps it
into the GPU page tables. The current implementation passes a GPU-page-size
(4K-based) PFN to svm_range_restore_pages() to restore the range.

SVM ranges are tracked using system-page-size PFNs. On systems where the
system page size is larger than 4K, using GPU-page-size PFNs to restore the
range causes two problems:

Range lookup fails:
Because the restore function receives PFNs in GPU (4K) units, the SVM
range lookup does not find the existing range. This will result in a
duplicate SVM range being created.

VMA lookup failure:
The restore function also tries to locate the VMA for the faulting address.
It converts the GPU-page-size PFN into an address using the system page
size, which results in an incorrect address on non-4K page-size systems.
As a result, the VMA lookup fails with the message: "address 0xxxx VMA is
removed".

This patch passes the system-page-size PFN to svm_range_restore_pages() so
that the SVM range is restored correctly on non-4K page systems.

Signed-off-by: Donet Tom <[email protected]>
Acked-by: Christian König <[email protected]>

---
  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 6a2ea200d90c..7a3cb0057ac5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -2985,14 +2985,14 @@ bool amdgpu_vm_handle_fault(struct amdgpu_device *adev, 
u32 pasid,
       if (!root)
               return false;

-     addr /= AMDGPU_GPU_PAGE_SIZE;
-
       if (is_compute_context && !svm_range_restore_pages(adev, pasid, vmid,
-         node_id, addr, ts, write_fault)) {
+         node_id, addr >> PAGE_SHIFT, ts, write_fault)) {
               amdgpu_bo_unref(&root);
               return true;
       }

+     addr /= AMDGPU_GPU_PAGE_SIZE;
+
       r = amdgpu_bo_reserve(root, true);
       if (r)
               goto error_unref;

Reply via email to