]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu/userq: take the userq_mgr lock in enforce isolation
authorAlex Deucher <alexander.deucher@amd.com>
Fri, 25 Apr 2025 16:11:45 +0000 (12:11 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 30 Apr 2025 22:09:26 +0000 (18:09 -0400)
Add the missing locking.

Fixes: 94976e7e5ede ("drm/amdgpu/userq: add helpers to start/stop scheduling")
Reviewed-by: Arvind Yadav <Arvind.Yadav@amd.com>
Reviewed-by: Prike Liang <Prike.Liang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c

index 1fa9d2be87f399bf5910a57440a9aad0518323d3..afbe01149ed3fcda1194b8da04c12a0a4dee350b 100644 (file)
@@ -865,6 +865,7 @@ int amdgpu_userq_stop_sched_for_enforce_isolation(struct amdgpu_device *adev,
        adev->userq_halt_for_enforce_isolation = true;
        list_for_each_entry_safe(uqm, tmp, &adev->userq_mgr_list, list) {
                cancel_delayed_work_sync(&uqm->resume_work);
+               mutex_lock(&uqm->userq_mutex);
                idr_for_each_entry(&uqm->userq_idr, queue, queue_id) {
                        if (((queue->queue_type == AMDGPU_HW_IP_GFX) ||
                             (queue->queue_type == AMDGPU_HW_IP_COMPUTE)) &&
@@ -874,6 +875,7 @@ int amdgpu_userq_stop_sched_for_enforce_isolation(struct amdgpu_device *adev,
                                        ret = r;
                        }
                }
+               mutex_unlock(&uqm->userq_mutex);
        }
        mutex_unlock(&adev->userq_mutex);
        return ret;
@@ -897,6 +899,7 @@ int amdgpu_userq_start_sched_for_enforce_isolation(struct amdgpu_device *adev,
                dev_warn(adev->dev, "userq scheduling already started!\n");
        adev->userq_halt_for_enforce_isolation = false;
        list_for_each_entry_safe(uqm, tmp, &adev->userq_mgr_list, list) {
+               mutex_lock(&uqm->userq_mutex);
                idr_for_each_entry(&uqm->userq_idr, queue, queue_id) {
                        if (((queue->queue_type == AMDGPU_HW_IP_GFX) ||
                             (queue->queue_type == AMDGPU_HW_IP_COMPUTE)) &&
@@ -906,6 +909,7 @@ int amdgpu_userq_start_sched_for_enforce_isolation(struct amdgpu_device *adev,
                                        ret = r;
                        }
                }
+               mutex_unlock(&uqm->userq_mutex);
        }
        mutex_unlock(&adev->userq_mutex);
        return ret;