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,
>  };

Reply via email to