On Wed, Aug 5, 2026 at 6:23 PM Eric Huang <[email protected]> wrote:
>
> new api will be used to workaround a HW scheduler issue
> for 100% usage when gpu has no workload.
>
> Signed-off-by: Eric Huang <[email protected]>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 23 +++++++++++++++++++++++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h |  4 ++++
>  drivers/gpu/drm/amd/amdgpu/mes_v11_0.c  |  5 ++++-
>  3 files changed, 31 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> index b96f94e5169f..421d937c1188 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> @@ -1140,6 +1140,29 @@ void amdgpu_mes_free_gang_ctx_index(struct amdgpu_mes 
> *mes,
>         amdgpu_mes_unlock(mes);
>  }
>
> +int amdgpu_mes_notify_unmap_queue(struct amdgpu_device *adev)
> +{
> +       struct mes_misc_op_input op_input = {0};
> +       int r;
> +
> +       op_input.op = MES_MISC_NOTIFY_WORK_ON_UNMAPPED_QUEUE;
> +
> +       if (!adev->mes.funcs->misc_op) {
> +               dev_err(adev->dev, "mes notify unmap queue is not 
> supported!\n");
> +               r = -EINVAL;
> +               goto error;
> +       }
> +
> +       amdgpu_mes_lock(&adev->mes);
> +       r = adev->mes.funcs->misc_op(&adev->mes, &op_input);
> +       amdgpu_mes_unlock(&adev->mes);
> +       if (r)
> +               dev_err(adev->dev, "failed to notify unmap queue.\n");
> +
> +error:
> +       return r;
> +}
> +
>  #if defined(CONFIG_DEBUG_FS)
>
>  static int amdgpu_debugfs_mes_event_log_show(struct seq_file *m, void 
> *unused)
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
> index 977c057dcce8..5230b1ba1a46 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
> @@ -366,6 +366,7 @@ enum mes_misc_opcode {
>         MES_MISC_OP_WRM_REG_WR_WAIT,
>         MES_MISC_OP_SET_SHADER_DEBUGGER,
>         MES_MISC_OP_CHANGE_CONFIG,
> +       MES_MISC_NOTIFY_WORK_ON_UNMAPPED_QUEUE

What's the minimum fw version which supports this?  We need to check
so we only use it when supported.

Alex

>  };
>
>  struct mes_misc_op_input {
> @@ -643,4 +644,7 @@ int amdgpu_mes_alloc_gang_ctx_index(struct amdgpu_mes 
> *mes,
>                                     uint32_t *index);
>  void amdgpu_mes_free_gang_ctx_index(struct amdgpu_mes *mes,
>                                     uint32_t index);
> +
> +int amdgpu_mes_notify_unmap_queue(struct amdgpu_device *adev);
> +
>  #endif /* __AMDGPU_MES_H__ */
> diff --git a/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c 
> b/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
> index a0b874c9ee7b..bc0ee6ccfca7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
> @@ -957,7 +957,10 @@ static int mes_v11_0_misc_op(struct amdgpu_mes *mes,
>                 misc_pkt.change_config.option.bits.limit_single_process =
>                                 
> input->change_config.option.limit_single_process;
>                 break;
> -
> +       case MES_MISC_NOTIFY_WORK_ON_UNMAPPED_QUEUE:
> +               misc_pkt.opcode = MESAPI_MISC__NOTIFY_WORK_ON_UNMAPPED_QUEUE;
> +               misc_pkt.queue_sch_level = AMD_PRIORITY_LEVEL_NORMAL;
> +               break;
>         default:
>                 drm_err(adev_to_drm(mes->adev), "unsupported misc op (%d)\n", 
> input->op);
>                 return -EINVAL;
> --
> 2.34.1
>

Reply via email to