On Wed, Dec 3, 2025 at 8:05 AM Lijo Lazar <[email protected]> wrote:
>
> Add cwsr parameters to userqueue ioctl. User should pass the GPU virtual
> address for save/restore buffer, and size allocated. They are supported
> only for user compute queues.
>
> Signed-off-by: Lijo Lazar <[email protected]>
> ---
>  drivers/gpu/drm/amd/amdgpu/mes_userqueue.c | 13 +++++++++----
>  include/uapi/drm/amdgpu_drm.h              | 16 ++++++++++++++++
>  2 files changed, 25 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c 
> b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
> index 0ac87618a86a..8865a266d25a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
> @@ -322,16 +322,21 @@ static int mes_userq_mqd_create(struct 
> amdgpu_usermode_queue *queue,
>
>                 if (amdgpu_cwsr_is_enabled(adev)) {
>                         cwsr_params.ctx_save_area_address =
> -                               userq_props->ctx_save_area_addr;
> -                       cwsr_params.cwsr_sz = userq_props->ctx_save_area_size;
> -                       cwsr_params.ctl_stack_sz = 
> userq_props->ctl_stack_size;
> -
> +                               compute_mqd->ctx_save_area_addr;
> +                       cwsr_params.cwsr_sz = compute_mqd->ctx_save_area_size;
> +                       cwsr_params.ctl_stack_sz = 
> compute_mqd->ctl_stack_size;
>                         r = amdgpu_userq_input_cwsr_params_validate(
>                                 queue, &cwsr_params);
>                         if (r) {
>                                 kfree(compute_mqd);
>                                 goto free_mqd;
>                         }
> +                       userq_props->ctx_save_area_addr =
> +                               compute_mqd->ctx_save_area_addr;
> +                       userq_props->ctx_save_area_size =
> +                               compute_mqd->ctx_save_area_size;
> +                       userq_props->ctl_stack_size =
> +                               compute_mqd->ctl_stack_size;
>                 }
>
>                 kfree(compute_mqd);
> diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h
> index 2bb9daafb560..1a27e218d4ea 100644
> --- a/include/uapi/drm/amdgpu_drm.h
> +++ b/include/uapi/drm/amdgpu_drm.h
> @@ -464,6 +464,22 @@ struct drm_amdgpu_userq_mqd_compute_gfx11 {
>          * to get the size.
>          */
>         __u64   eop_va;
> +       /**
> +        * @ctx_save_area_addr: Virtual address of the GPU memory for 
> save/restore buffer.
> +        * This must be a from a separate GPU object, and use AMDGPU_INFO 
> IOCTL

"be from"

Does it actually need to be a separate buffer?  May also want a
comment that this address covers both the ctx save area and the ctl
stack.

> +        * to get the size.
> +        */
> +       __u64 ctx_save_area_addr;

ctx_save_area_va for consistently.


> +       /**
> +        * @ctx_save_area_size:  Total size allocated for save/restore buffer.
> +        * Use AMDGPU_INFO IOCTL to get the size.
> +        */
> +       __u32 ctx_save_area_size;
> +       /**
> +        * @ctl_stack_size: Size of control stack region in the save/restore 
> buffer.
> +        * Use AMDGPU_INFO IOCTL to get the size.
> +        */

Specify that these are in bytes.

Alex

> +       __u32 ctl_stack_size;
>  };
>
>  /* userq signal/wait ioctl */
> --
> 2.49.0
>

Reply via email to