On 4/30/25 17:48, Alex Deucher wrote: > Used to reset a hung queue. > > Reviewed-by: Sunil Khatri <sunil.kha...@amd.com> > Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
Reviewed-by: Christian König <christian.koe...@amd.com> > --- > drivers/gpu/drm/amd/amdgpu/mes_userqueue.c | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c > b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c > index d6f50b13e2ba0..650fdb68db127 100644 > --- a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c > +++ b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c > @@ -347,9 +347,30 @@ 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; > + 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; > + > + 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, > };