[v4 09/11] drm/amdgpu: add mes userq reset callback
Jesse.Zhang
Jesse.Zhang at amd.com
Wed Jul 16 10:59:29 UTC 2025
Used to reset a hung queue.
v2: enabling MMIO path for compute queue resets (Jesse)
Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
Signed-off-by: Jesse Zhang <Jesse.Zhang at amd.com>
---
drivers/gpu/drm/amd/amdgpu/mes_userqueue.c | 27 ++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
index 64aa749c58c5..3bcd1b0b3192 100644
--- a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
+++ b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
@@ -347,9 +347,36 @@ mes_userq_mqd_destroy(struct amdgpu_userq_mgr *uq_mgr,
amdgpu_userq_destroy_object(uq_mgr, &queue->mqd);
}
+static int mes_userq_reset(struct amdgpu_userq_mgr *uq_mgr,
+ struct amdgpu_usermode_queue *queue)
+{
+ struct amdgpu_device *adev = uq_mgr->adev;
+ struct mes_reset_queue_input queue_input;
+ struct userq_hang_info *hang_info = &queue->hang_info;
+ int r;
+
+ memset(&queue_input, 0x0, sizeof(struct mes_reset_queue_input));
+
+ queue_input.doorbell_offset = queue->doorbell_index;
+ queue_input.queue_type = queue->queue_type;
+ if (queue->queue_type == AMDGPU_RING_TYPE_COMPUTE) {
+ queue_input.me_id = hang_info->me;
+ queue_input.pipe_id = hang_info->pipe;
+ queue_input.queue_id = hang_info->queue;
+ queue_input.use_mmio = true;
+ }
+ amdgpu_mes_lock(&adev->mes);
+ r = adev->mes.funcs->reset_hw_queue(&adev->mes, &queue_input);
+ amdgpu_mes_unlock(&adev->mes);
+ if (r)
+ dev_err(adev->dev, "Failed to reset queue, err (%d)\n", r);
+ return r;
+}
+
const struct amdgpu_userq_funcs userq_mes_funcs = {
.mqd_create = mes_userq_mqd_create,
.mqd_destroy = mes_userq_mqd_destroy,
.unmap = mes_userq_unmap,
.map = mes_userq_map,
+ .reset = mes_userq_reset,
};
--
2.49.0
More information about the amd-gfx
mailing list