On 1/9/26 14:57, Alex Deucher wrote:
> These IOCTLs shouldn't be called when userqs are not
> enabled.  Make sure they are enabled before executing
> the IOCTLs.
> 
> Signed-off-by: Alex Deucher <[email protected]>

Reviewed-by: Christian König <[email protected]>

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c       | 16 ++++++++++++++++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h       |  1 +
>  drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c |  6 ++++++
>  3 files changed, 23 insertions(+)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> index 98110f543307d..256ceca6d429b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> @@ -888,12 +888,28 @@ static int amdgpu_userq_input_args_validate(struct 
> drm_device *dev,
>       return 0;
>  }
>  
> +bool amdgpu_userq_enabled(struct drm_device *dev)
> +{
> +     struct amdgpu_device *adev = drm_to_adev(dev);
> +     int i;
> +
> +     for (i = 0; i < AMDGPU_HW_IP_NUM; i++) {
> +             if (adev->userq_funcs[i])
> +                     return true;
> +     }
> +
> +     return false;
> +}
> +
>  int amdgpu_userq_ioctl(struct drm_device *dev, void *data,
>                      struct drm_file *filp)
>  {
>       union drm_amdgpu_userq *args = data;
>       int r;
>  
> +     if (!amdgpu_userq_enabled(dev))
> +             return -ENOTSUPP;
> +
>       if (amdgpu_userq_input_args_validate(dev, args, filp) < 0)
>               return -EINVAL;
>  
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h
> index 7a5ec17704567..468b65d953b0d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h
> @@ -136,6 +136,7 @@ uint64_t amdgpu_userq_get_doorbell_index(struct 
> amdgpu_userq_mgr *uq_mgr,
>                                            struct drm_file *filp);
>  
>  u32 amdgpu_userq_get_supported_ip_mask(struct amdgpu_device *adev);
> +bool amdgpu_userq_enabled(struct drm_device *dev);
>  
>  int amdgpu_userq_suspend(struct amdgpu_device *adev);
>  int amdgpu_userq_resume(struct amdgpu_device *adev);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
> index 1a23e7709dea9..d6fc65803a309 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
> @@ -493,6 +493,9 @@ int amdgpu_userq_signal_ioctl(struct drm_device *dev, 
> void *data,
>       struct drm_exec exec;
>       u64 wptr;
>  
> +     if (!amdgpu_userq_enabled(dev))
> +             return -ENOTSUPP;
> +
>       num_syncobj_handles = args->num_syncobj_handles;
>       syncobj_handles = memdup_user(u64_to_user_ptr(args->syncobj_handles),
>                                     size_mul(sizeof(u32), 
> num_syncobj_handles));
> @@ -680,6 +683,9 @@ int amdgpu_userq_wait_ioctl(struct drm_device *dev, void 
> *data,
>       int r, i, rentry, wentry, cnt;
>       struct drm_exec exec;
>  
> +     if (!amdgpu_userq_enabled(dev))
> +             return -ENOTSUPP;
> +
>       num_read_bo_handles = wait_info->num_bo_read_handles;
>       bo_handles_read = 
> memdup_user(u64_to_user_ptr(wait_info->bo_read_handles),
>                                     size_mul(sizeof(u32), 
> num_read_bo_handles));

Reply via email to