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

Reply via email to