Only mark an additional MES queue as hung and complete its fences after both hardware reset and removal succeed. A failed operation leaves its dependencies pending for device recovery; it does not prove DMA stopped.
Signed-off-by: Prike Liang <[email protected]> --- drivers/gpu/drm/amd/amdgpu/mes_userqueue.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c index fe49aa4dc5ff..3b973ea0c24a 100644 --- a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c +++ b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c @@ -282,7 +282,6 @@ int mes_userq_reset_queue(struct amdgpu_device *adev, if (uq == guilty_uq) continue; if (uq->doorbell_index == db) { - uq->state = AMDGPU_USERQ_STATE_HUNG; if (use_mmio) r = amdgpu_mes_reset_queue_mmio(adev, queue_type, 0, 1, pipe, queue, 0); else @@ -292,8 +291,10 @@ int mes_userq_reset_queue(struct amdgpu_device *adev, r = mes_userq_unmap(uq); if (r) return r; + trace_amdgpu_userq_state_changed(uq, AMDGPU_USERQ_STATE_HUNG); + uq->state = AMDGPU_USERQ_STATE_HUNG; amdgpu_userq_fence_driver_force_completion(uq); - break; + return 0; } } } -- 2.34.1
