On 3/26/26 14:23, Sunil Khatri wrote:
> In function amdgpu_userq_gem_va_unmap_validate call
> dma_resv_wait_timeout directly.
> 
> Signed-off-by: Sunil Khatri <[email protected]>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 11 ++---------
>  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c    |  4 +---
>  2 files changed, 3 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> index d29620d3d0d2..e73c69026268 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> @@ -1477,7 +1477,6 @@ int amdgpu_userq_gem_va_unmap_validate(struct 
> amdgpu_device *adev,
>       u32 ip_mask = amdgpu_userq_get_supported_ip_mask(adev);
>       struct amdgpu_bo_va *bo_va = mapping->bo_va;
>       struct dma_resv *resv = bo_va->base.bo->tbo.base.resv;
> -     int ret = 0;
>  
>       if (!ip_mask)
>               return 0;
> @@ -1491,14 +1490,8 @@ int amdgpu_userq_gem_va_unmap_validate(struct 
> amdgpu_device *adev,
>        * unmap is only for one kind of userq VAs, so at this point suppose
>        * the eviction fence is always unsignaled.
>        */
> -     if (!dma_resv_test_signaled(resv, DMA_RESV_USAGE_BOOKKEEP)) {
> -             ret = dma_resv_wait_timeout(resv, DMA_RESV_USAGE_BOOKKEEP, true,
> -                                         MAX_SCHEDULE_TIMEOUT);
> -             if (ret <= 0)
> -                     return -EBUSY;
> -     }
> -
> -     return 0;
> +     return dma_resv_wait_timeout(resv, DMA_RESV_USAGE_BOOKKEEP,
> +                                  true, MAX_SCHEDULE_TIMEOUT);
>  }
>  
>  void amdgpu_userq_pre_reset(struct amdgpu_device *adev)
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index 937a6dd3a4b5..7aa5b8c457c2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -1978,7 +1978,6 @@ int amdgpu_vm_bo_unmap(struct amdgpu_device *adev,
>       struct amdgpu_bo_va_mapping *mapping;
>       struct amdgpu_vm *vm = bo_va->base.vm;
>       bool valid = true;
> -     int r;
>  
>       saddr /= AMDGPU_GPU_PAGE_SIZE;
>  
> @@ -2004,8 +2003,7 @@ int amdgpu_vm_bo_unmap(struct amdgpu_device *adev,
>        * from user space.
>        */
>       if (unlikely(atomic_read(&bo_va->userq_va_mapped) > 0)) {
> -             r = amdgpu_userq_gem_va_unmap_validate(adev, mapping, saddr);
> -             if (unlikely(r == -EBUSY))
> +             if (amdgpu_userq_gem_va_unmap_validate(adev, mapping, saddr))

That is actually broken. dma_resv_wait_timeout() can return -ERESTARTSYS when 
interrupted and in that moment you should not print an error.

Regards,
Christian.

>                       dev_warn_once(adev->dev,
>                                     "Attempt to unmap an active userq 
> buffer\n");
>       }

Reply via email to