]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: make sure userqs are enabled in userq IOCTLs
authorAlex Deucher <alexander.deucher@amd.com>
Fri, 9 Jan 2026 13:54:55 +0000 (08:54 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Sat, 10 Jan 2026 19:21:52 +0000 (14:21 -0500)
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>
drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h
drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c

index c5dd5815056c5496b6d4ec01cf823f3d115be4d4..c11ec5ab9cc10021ff7052b4ce9d66daf00cf38e 100644 (file)
@@ -889,12 +889,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;
 
index 1eaa94f8a2913f1ed038d8f9d79996cbf9dd76a3..95ace14e458c4b5986f636a32a4b17d0d3044c1a 100644 (file)
@@ -135,6 +135,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);
index 25f17853646959fa7fe83e78ae817b9bc3873a1b..3c6bd5531627b532aa254944e2d15482c3d92136 100644 (file)
@@ -474,6 +474,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));
@@ -656,6 +659,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));