Applied. Thanks! 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; >
