]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 23 Jan 2026 10:21:31 +0000 (11:21 +0100)
commit b6dff005fcf32dd072f6f2d08ca461394a21bd4f upstream.

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
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
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 79c7fa0a9ff7bbcba312d5a9721df98ad79e8996..8c41951feb437a70d149a0388b30579ca776c49a 100644 (file)
@@ -681,12 +681,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 dbc13a807ca82171255666221667f856e0f2ccb1..d78532f9d507b9968a5bf80b98e0472f70d440c5 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 53fe10931fab04d4e9c7d06559677ec55963d410..5c181ac75d548f6ff0b1e21435e9c41199121d84 100644 (file)
@@ -472,6 +472,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));
@@ -654,6 +657,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));