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));
