down_read/up_read adev->reset_domain semaphore should be placed around
remove queue.
Fixes: f5587b4740c0 ("drm/amdgpu: Remove faulty queue before resume")
Signed-off-by: Amber Lin <[email protected]>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 5 +++++
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 4 ----
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
index 0506b90f318e..982b41606d48 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
@@ -2358,9 +2358,14 @@ int amdgpu_gfx_reset_mes_compute(struct amdgpu_device
*adev,
* preempted successfuly. Remove it before resume all so it
* doesn't get mapped back
*/
+ if (!down_read_trylock(&adev->reset_domain->sem)) {
+ r = -EIO;
+ goto out;
+ }
amdgpu_mes_lock(&adev->mes);
r = adev->mes.funcs->remove_hw_queue(&adev->mes, queue_input);
amdgpu_mes_unlock(&adev->mes);
+ up_read(&adev->reset_domain->sem);
}
out:
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
index fc1d179148c0..4e60d9364e37 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
@@ -493,12 +493,8 @@ static int recover_bad_queue_mes(struct
device_queue_manager *dqm, struct queue
struct amdgpu_device *adev = (struct amdgpu_device *)dqm->dev->adev;
int r = 0;
- if (!down_read_trylock(&adev->reset_domain->sem))
- return -EIO;
-
r = reset_queues_mes(dqm, q);
- up_read(&adev->reset_domain->sem);
return r;
}
--
2.43.0