Skip to content

Commit b6dff00

Browse files
committed
drm/amdgpu: make sure userqs are enabled in userq IOCTLs
These IOCTLs shouldn't be called when userqs are not enabled. Make sure they are enabled before executing the IOCTLs. Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> (cherry picked from commit d967509) Cc: stable@vger.kernel.org
1 parent 122b15c commit b6dff00

3 files changed

Lines changed: 23 additions & 0 deletions

File tree

drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -885,12 +885,28 @@ static int amdgpu_userq_input_args_validate(struct drm_device *dev,
885885
return 0;
886886
}
887887

888+
bool amdgpu_userq_enabled(struct drm_device *dev)
889+
{
890+
struct amdgpu_device *adev = drm_to_adev(dev);
891+
int i;
892+
893+
for (i = 0; i < AMDGPU_HW_IP_NUM; i++) {
894+
if (adev->userq_funcs[i])
895+
return true;
896+
}
897+
898+
return false;
899+
}
900+
888901
int amdgpu_userq_ioctl(struct drm_device *dev, void *data,
889902
struct drm_file *filp)
890903
{
891904
union drm_amdgpu_userq *args = data;
892905
int r;
893906

907+
if (!amdgpu_userq_enabled(dev))
908+
return -ENOTSUPP;
909+
894910
if (amdgpu_userq_input_args_validate(dev, args, filp) < 0)
895911
return -EINVAL;
896912

drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ uint64_t amdgpu_userq_get_doorbell_index(struct amdgpu_userq_mgr *uq_mgr,
141141
struct drm_file *filp);
142142

143143
u32 amdgpu_userq_get_supported_ip_mask(struct amdgpu_device *adev);
144+
bool amdgpu_userq_enabled(struct drm_device *dev);
144145

145146
int amdgpu_userq_suspend(struct amdgpu_device *adev);
146147
int amdgpu_userq_resume(struct amdgpu_device *adev);

drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,9 @@ int amdgpu_userq_signal_ioctl(struct drm_device *dev, void *data,
471471
struct drm_exec exec;
472472
u64 wptr;
473473

474+
if (!amdgpu_userq_enabled(dev))
475+
return -ENOTSUPP;
476+
474477
num_syncobj_handles = args->num_syncobj_handles;
475478
syncobj_handles = memdup_user(u64_to_user_ptr(args->syncobj_handles),
476479
size_mul(sizeof(u32), num_syncobj_handles));
@@ -653,6 +656,9 @@ int amdgpu_userq_wait_ioctl(struct drm_device *dev, void *data,
653656
int r, i, rentry, wentry, cnt;
654657
struct drm_exec exec;
655658

659+
if (!amdgpu_userq_enabled(dev))
660+
return -ENOTSUPP;
661+
656662
num_read_bo_handles = wait_info->num_bo_read_handles;
657663
bo_handles_read = memdup_user(u64_to_user_ptr(wait_info->bo_read_handles),
658664
size_mul(sizeof(u32), num_read_bo_handles));

0 commit comments

Comments
 (0)