Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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 d967509651601cddce7ff2a9f09479f3636f684d)
Cc: stable@vger.kernel.org

+23
+16
drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
··· 885 885 return 0; 886 886 } 887 887 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 + 888 901 int amdgpu_userq_ioctl(struct drm_device *dev, void *data, 889 902 struct drm_file *filp) 890 903 { 891 904 union drm_amdgpu_userq *args = data; 892 905 int r; 906 + 907 + if (!amdgpu_userq_enabled(dev)) 908 + return -ENOTSUPP; 893 909 894 910 if (amdgpu_userq_input_args_validate(dev, args, filp) < 0) 895 911 return -EINVAL;
+1
drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h
··· 141 141 struct drm_file *filp); 142 142 143 143 u32 amdgpu_userq_get_supported_ip_mask(struct amdgpu_device *adev); 144 + bool amdgpu_userq_enabled(struct drm_device *dev); 144 145 145 146 int amdgpu_userq_suspend(struct amdgpu_device *adev); 146 147 int amdgpu_userq_resume(struct amdgpu_device *adev);
+6
drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
··· 471 471 struct drm_exec exec; 472 472 u64 wptr; 473 473 474 + if (!amdgpu_userq_enabled(dev)) 475 + return -ENOTSUPP; 476 + 474 477 num_syncobj_handles = args->num_syncobj_handles; 475 478 syncobj_handles = memdup_user(u64_to_user_ptr(args->syncobj_handles), 476 479 size_mul(sizeof(u32), num_syncobj_handles)); ··· 655 652 u16 num_points, num_fences = 0; 656 653 int r, i, rentry, wentry, cnt; 657 654 struct drm_exec exec; 655 + 656 + if (!amdgpu_userq_enabled(dev)) 657 + return -ENOTSUPP; 658 658 659 659 num_read_bo_handles = wait_info->num_bo_read_handles; 660 660 bo_handles_read = memdup_user(u64_to_user_ptr(wait_info->bo_read_handles),