On 10/8/26 09:05, Srinivasan Shanmugam wrote:
> From: Lijo Lazar <[email protected]>
> 
> Initialize the CWSR handler during device initialization and release
> the associated resources during device teardown.
> 
> Add a per-file CWSR trap object for render-node user queues and map the
> first-level CWSR trap handler into the GPUVM associated with the file.
> Use the mapped TBA and TMA addresses when programming user queues.
> 
> Add user save area parameters to the MQD properties for compute queue
> creation and validate the parameters before using them for MQD
> initialization.
> 
> The CWSR parameter validation walks the VM mapping tree and updates the
> user queue VA mapping state. Reserve the VM root BO around the
> validation so the required VM reservation is held while accessing the
> mapping tree.
> 
> Signed-off-by: Lijo Lazar <[email protected]>
> Co-developed-by: James Zhu <[email protected]>
> Signed-off-by: James Zhu <[email protected]>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu.h        |   2 +
>  drivers/gpu/drm/amd/amdgpu/amdgpu_cwsr.h   |   6 ++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |   8 ++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c    |  10 ++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h    |   8 ++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c  |  25 +++++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h  |   8 +-
>  drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c     |  14 +++
>  drivers/gpu/drm/amd/amdgpu/mes_userqueue.c | 102 +++++++++++++++++----
>  9 files changed, 163 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 26561a4f4db8..bdd55ac5b06e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -333,6 +333,7 @@ struct amdgpu_reset_control;
>  struct amdgpu_coredump_info;
>  struct amdgpu_video_codecs;
>  struct amdgpu_cwsr_isa;
> +struct amdgpu_cwsr_trap_obj;
>  
>  enum amdgpu_cp_irq {
>       AMDGPU_CP_IRQ_GFX_ME0_PIPE0_EOP = 0,
> @@ -421,6 +422,7 @@ struct amdgpu_fpriv {
>       struct xarray           bo_list_handles;
>       struct amdgpu_ctx_mgr   ctx_mgr;
>       struct amdgpu_userq_mgr userq_mgr;
> +     struct amdgpu_cwsr_trap_obj *cwsr_trap;
>  
>       /* Eviction fence infra */
>       struct amdgpu_eviction_fence_mgr evf_mgr;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cwsr.h 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_cwsr.h
> index 7f922559e297..5717e1d662fc 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cwsr.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cwsr.h
> @@ -78,4 +78,10 @@ uint32_t amdgpu_cwsr_size_needed(struct amdgpu_device 
> *adev, int num_xcc);
>  int amdgpu_cwsr_validate_params(struct amdgpu_device *adev,
>                               struct amdgpu_cwsr_params *cwsr_params,
>                               int num_xcc);
> +static inline bool amdgpu_cwsr_has_dbg_wa(struct amdgpu_device *adev)
> +{
> +     u32 gc_ver = amdgpu_ip_version(adev, GC_HWIP, 0);
> +
> +     return gc_ver >= IP_VERSION(11, 0, 0) && gc_ver <= IP_VERSION(11, 0, 3);
> +}
>  #endif
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index e0014611f039..5a7f111763bf 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -81,6 +81,7 @@
>  #include "amdgpu_reset.h"
>  #include "amdgpu_virt.h"
>  #include "amdgpu_dev_coredump.h"
> +#include "amdgpu_cwsr.h"
>  
>  #include <linux/suspend.h>
>  #include <drm/task_barrier.h>
> @@ -2549,6 +2550,12 @@ static int amdgpu_device_ip_init(struct amdgpu_device 
> *adev)
>  
>       r = amdgpu_cper_init(adev);
>  
> +     if (!r) {

Better make that if (r) goto init_failed; to keep the style consistend.


> +             r = amdgpu_cwsr_init(adev);
> +             if (r == -EOPNOTSUPP)
> +                     r = 0;
> +     }
> +
>  init_failed:
>  
>       return r;
> @@ -2946,6 +2953,7 @@ static int amdgpu_device_ip_fini(struct amdgpu_device 
> *adev)
>  {
>       int i, r;
>  
> +     amdgpu_cwsr_fini(adev);
>       amdgpu_cper_fini(adev);
>  
>       if (amdgpu_sriov_vf(adev) && adev->virt.ras_init_done)
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> index f34150d20a2f..f3945b3988d8 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> @@ -49,6 +49,8 @@
>  #include "amdgpu_userq.h"
>  #include "amdgpu_video_codecs.h"
>  #include "amdgpu_ras_mgr.h"
> +#include "amdgpu_vm.h"
> +#include "amdgpu_cwsr.h"
>  
>  void amdgpu_unregister_gpu_instance(struct amdgpu_device *adev)
>  {
> @@ -1552,6 +1554,13 @@ int amdgpu_driver_open_kms(struct drm_device *dev, 
> struct drm_file *file_priv)
>                        r);
>  
>       amdgpu_evf_mgr_init(&fpriv->evf_mgr);
> +
> +     if (amdgpu_cwsr_is_enabled(adev)) {

Better move that check into amdgpu_cwsr_alloc().

Apart from those nit picks looks good on first glance,
Christian.

> +             r = amdgpu_cwsr_alloc(adev, &fpriv->vm, &fpriv->cwsr_trap);
> +             if (r)
> +                     dev_dbg(adev->dev, "cwsr trap not enabled");
> +     }
> +
>       amdgpu_ctx_mgr_init(&fpriv->ctx_mgr, adev);
>  
>       file_priv->driver_priv = fpriv;
> @@ -1621,6 +1630,7 @@ void amdgpu_driver_postclose_kms(struct drm_device *dev,
>       }
>  
>       amdgpu_ctx_mgr_fini(&fpriv->ctx_mgr);
> +     amdgpu_cwsr_free(adev, &fpriv->vm, &fpriv->cwsr_trap);
>  
>       if (pasid)
>               amdgpu_pasid_free_delayed(pd->tbo.base.resv, pasid);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
> index 2b13a5b37539..b3df09dbcbad 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
> @@ -527,6 +527,14 @@ struct amdgpu_mqd_prop {
>       uint32_t cu_mask_count;
>       uint32_t cu_flags;
>       bool is_user_cu_masked;
> +     bool aql_queue;
> +     u32 queue_percentage;
> +     /* used in gfx9 and gfx12.1 */
> +     u32 pm4_target_xcc;
> +     /* cwsr params */
> +     u64 ctx_save_area_addr;
> +     u32 ctx_save_area_size;
> +     u32 ctl_stack_size;
>  };
>  
>  struct amdgpu_mqd {
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> index e29823ae8672..6eea0ca40556 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> @@ -35,6 +35,7 @@
>  #include "amdgpu_hmm.h"
>  #include "amdgpu_userq_fence.h"
>  #include "amdgpu_trace.h"
> +#include "amdgpu_cwsr.h"
>  
>  u32 amdgpu_userq_get_supported_ip_mask(struct amdgpu_device *adev)
>  {
> @@ -266,6 +267,30 @@ int amdgpu_userq_input_va_validate(struct amdgpu_device 
> *adev,
>       return -EINVAL;
>  }
>  
> +int amdgpu_userq_input_cwsr_params_validate(
> +     struct amdgpu_usermode_queue *queue,
> +     struct amdgpu_cwsr_params *cwsr_params)
> +{
> +     struct amdgpu_fpriv *fpriv = uq_mgr_to_fpriv(queue->userq_mgr);
> +     struct amdgpu_device *adev = queue->userq_mgr->adev;
> +     u32 cwsr_size;
> +     int num_xcc;
> +     int r;
> +
> +     num_xcc = amdgpu_xcp_get_num_xcc(adev->xcp_mgr, fpriv->xcp_id);
> +     r = amdgpu_cwsr_validate_params(queue->userq_mgr->adev, cwsr_params,
> +                                     num_xcc);
> +     if (r)
> +             return r;
> +     cwsr_size = amdgpu_cwsr_size_needed(queue->userq_mgr->adev, num_xcc);
> +     if (!cwsr_size)
> +             return -EOPNOTSUPP;
> +
> +     return amdgpu_userq_input_va_validate(
> +             adev, queue, cwsr_params->ctx_save_area_address, cwsr_size,
> +             &queue->userq_vas.va.cwsr);
> +}
> +
>  static bool amdgpu_userq_buffer_va_mapped(struct amdgpu_vm *vm, u64 addr)
>  {
>       struct amdgpu_bo_va_mapping *mapping;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h
> index 488dc21d7c81..727f60c40bbf 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h
> @@ -41,6 +41,7 @@ enum amdgpu_userq_state {
>  };
>  
>  struct amdgpu_mqd_prop;
> +struct amdgpu_cwsr_params;
>  
>  struct amdgpu_userq_obj {
>       void             *cpu_ptr;
> @@ -97,8 +98,9 @@ struct amdgpu_usermode_queue {
>                       u64 eop;
>                       u64 shadow;
>                       u64 csa;
> +                     u64 cwsr;
>               } va;
> -             u64 va_array[6];
> +             u64 va_array[7];
>       } userq_vas;
>  
>       uint32_t        gang_ctx_array_index;
> @@ -200,4 +202,8 @@ int amdgpu_userq_input_va_validate(struct amdgpu_device 
> *adev,
>  
>  void amdgpu_userq_gem_va_unmap_validate(struct amdgpu_device *adev,
>                                       struct amdgpu_bo_va_mapping *mapping);
> +int amdgpu_userq_input_cwsr_params_validate(
> +     struct amdgpu_usermode_queue *queue,
> +     struct amdgpu_cwsr_params *cwsr_params);
> +
>  #endif
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c 
> b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
> index 420ce997bebc..b5326c2067db 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
> @@ -3327,6 +3327,20 @@ static int gfx_v12_0_compute_mqd_init(struct 
> amdgpu_device *adev, void *m,
>       /* set CU mask */
>       gfx_v12_0_compute_mqd_set_cu_mask(adev, mqd, prop);
>  
> +     /* If non-zero, assume cwsr is enabled */
> +     if (prop->ctx_save_area_addr) {
> +             mqd->cp_hqd_persistent_state |=
> +                     (1 << CP_HQD_PERSISTENT_STATE__QSWITCH_MODE__SHIFT);
> +             mqd->cp_hqd_ctx_save_base_addr_lo =
> +                     lower_32_bits(prop->ctx_save_area_addr);
> +             mqd->cp_hqd_ctx_save_base_addr_hi =
> +                     upper_32_bits(prop->ctx_save_area_addr);
> +             mqd->cp_hqd_ctx_save_size = prop->ctx_save_area_size;
> +             mqd->cp_hqd_cntl_stack_size = prop->ctl_stack_size;
> +             mqd->cp_hqd_cntl_stack_offset = prop->ctl_stack_size;
> +             mqd->cp_hqd_wg_state_offset = prop->ctl_stack_size;
> +     }
> +
>       return 0;
>  }
>  
> diff --git a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c 
> b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
> index 1b76c10d1ac2..3b7a1479fbf7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
> @@ -27,6 +27,7 @@
>  #include "mes_userqueue.h"
>  #include "amdgpu_userq_fence.h"
>  #include "amdgpu_trace.h"
> +#include "amdgpu_cwsr.h"
>  
>  #define AMDGPU_USERQ_PROC_CTX_SZ PAGE_SIZE
>  #define AMDGPU_USERQ_GANG_CTX_SZ PAGE_SIZE
> @@ -115,6 +116,7 @@ static int convert_to_mes_priority(int priority)
>  static int mes_userq_map(struct amdgpu_usermode_queue *queue)
>  {
>       struct amdgpu_userq_mgr *uq_mgr = queue->userq_mgr;
> +     struct amdgpu_fpriv *fpriv = uq_mgr_to_fpriv(uq_mgr);
>       struct amdgpu_device *adev = uq_mgr->adev;
>       struct amdgpu_userq_obj *ctx = &queue->fw_obj;
>       struct amdgpu_mqd_prop *userq_props = queue->userq_prop;
> @@ -146,24 +148,37 @@ static int mes_userq_map(struct amdgpu_usermode_queue 
> *queue)
>       queue_input.page_table_base_addr = 
> amdgpu_gmc_pd_addr(queue->vm->root.bo);
>       queue_input.wptr_mc_addr = queue->wptr_obj.gpu_addr;
>  
> +     if (fpriv->cwsr_trap) {
> +             queue_input.tba_addr = fpriv->cwsr_trap->tba_gpu_va_addr;
> +             queue_input.tma_addr = fpriv->cwsr_trap->tma_gpu_va_addr;
> +             queue_input.trap_en = !amdgpu_cwsr_has_dbg_wa(adev);
> +     }
> +
>       if (mes->use_rs64mem) {
>               if (!uq_mgr->proc_ctx_allocated) {
> -                     r = amdgpu_mes_alloc_proc_ctx_index(mes, 
> &uq_mgr->proc_ctx_array_index);
> +                     r = amdgpu_mes_alloc_proc_ctx_index(mes,
> +                                                         
> &uq_mgr->proc_ctx_array_index);
>                       if (r) {
> -                             DRM_ERROR("Failed to allocate userq process 
> index err:%d\n", r);
> +                             DRM_ERROR("Failed to allocate userq process 
> index err:%d\n",
> +                                       r);
>                               return r;
>                       }
>                       uq_mgr->proc_ctx_allocated = true;
>               }
>  
> -             r = amdgpu_mes_alloc_gang_ctx_index(mes, 
> &queue->gang_ctx_array_index);
> +             r = amdgpu_mes_alloc_gang_ctx_index(mes,
> +                                                 
> &queue->gang_ctx_array_index);
>               if (r) {
>                       DRM_ERROR("Failed to allocate userq gang index 
> err:%d\n", r);
>                       return r;
>               }
> -             queue_input.process_context_array_index = 
> uq_mgr->proc_ctx_array_index;
> -             queue_input.gang_context_array_index = 
> queue->gang_ctx_array_index;
> +
> +             queue_input.process_context_array_index =
> +                     uq_mgr->proc_ctx_array_index;
> +             queue_input.gang_context_array_index =
> +                     queue->gang_ctx_array_index;
>       }
> +
>       amdgpu_mes_lock(&adev->mes);
>       r = adev->mes.funcs->add_hw_queue(&adev->mes, &queue_input);
>       amdgpu_mes_unlock(&adev->mes);
> @@ -174,7 +189,9 @@ static int mes_userq_map(struct amdgpu_usermode_queue 
> *queue)
>  
>       amdgpu_mes_userq_queue_mapped(adev);
>  
> -     DRM_DEBUG_DRIVER("Queue (doorbell:%d) mapped successfully\n", 
> userq_props->doorbell_index);
> +     DRM_DEBUG_DRIVER("Queue (doorbell:%d) mapped successfully\n",
> +                      userq_props->doorbell_index);
> +
>       return 0;
>  }
>  
> @@ -398,6 +415,7 @@ static int mes_userq_mqd_create(struct 
> amdgpu_usermode_queue *queue,
>  
>       if (queue->queue_type == AMDGPU_HW_IP_COMPUTE) {
>               struct drm_amdgpu_userq_mqd_compute_gfx11 *compute_mqd;
> +             struct amdgpu_cwsr_params cwsr_params;
>  
>               if (mqd_user->mqd_size != sizeof(*compute_mqd)) {
>                       DRM_ERROR("Invalid compute IP MQD size\n");
> @@ -405,7 +423,8 @@ static int mes_userq_mqd_create(struct 
> amdgpu_usermode_queue *queue,
>                       goto free_mqd;
>               }
>  
> -             compute_mqd = memdup_user(u64_to_user_ptr(mqd_user->mqd), 
> mqd_user->mqd_size);
> +             compute_mqd = memdup_user(u64_to_user_ptr(mqd_user->mqd),
> +                                       mqd_user->mqd_size);
>               if (IS_ERR(compute_mqd)) {
>                       r = PTR_ERR(compute_mqd);
>                       goto free_mqd;
> @@ -416,6 +435,7 @@ static int mes_userq_mqd_create(struct 
> amdgpu_usermode_queue *queue,
>                       kfree(compute_mqd);
>                       goto free_mqd;
>               }
> +
>               r = amdgpu_userq_input_va_validate(adev, queue,
>                                                  compute_mqd->eop_va, 2048,
>                                                  &queue->userq_vas.va.eop);
> @@ -427,29 +447,63 @@ static int mes_userq_mqd_create(struct 
> amdgpu_usermode_queue *queue,
>  
>               userq_props->eop_gpu_addr = compute_mqd->eop_va;
>               userq_props->hqd_pipe_priority = AMDGPU_GFX_PIPE_PRIO_NORMAL;
> -             userq_props->hqd_queue_priority = 
> AMDGPU_GFX_QUEUE_PRIORITY_MINIMUM;
> +             userq_props->hqd_queue_priority =
> +                     AMDGPU_GFX_QUEUE_PRIORITY_MINIMUM;
>               userq_props->hqd_active = false;
>               userq_props->tmz_queue =
>                       mqd_user->flags & 
> AMDGPU_USERQ_CREATE_FLAGS_QUEUE_SECURE;
> +
> +             if (amdgpu_cwsr_is_enabled(adev)) {
> +                     struct amdgpu_fpriv *fpriv =
> +                             uq_mgr_to_fpriv(queue->userq_mgr);
> +                     int num_xcc;
> +
> +                     num_xcc = amdgpu_xcp_get_num_xcc(adev->xcp_mgr,
> +                                                      fpriv->xcp_id);
> +                     cwsr_params.ctx_save_area_address =
> +                             userq_props->ctx_save_area_addr;
> +                     cwsr_params.cwsr_sz =
> +                             userq_props->ctx_save_area_size;
> +                     userq_props->ctl_stack_size =
> +                             adev->cwsr_info->xcc_ctl_stack_sz * num_xcc;
> +
> +                     r = amdgpu_bo_reserve(queue->vm->root.bo, false);
> +                     if (r) {
> +                             kfree(compute_mqd);
> +                             goto free_mqd;
> +                     }
> +
> +                     r = amdgpu_userq_input_cwsr_params_validate(
> +                             queue, &cwsr_params);
> +                     amdgpu_bo_unreserve(queue->vm->root.bo);
> +                     if (r) {
> +                             kfree(compute_mqd);
> +                             goto free_mqd;
> +                     }
> +             }
> +
>               kfree(compute_mqd);
>       } else if (queue->queue_type == AMDGPU_HW_IP_GFX) {
>               struct drm_amdgpu_userq_mqd_gfx11 *mqd_gfx_v11;
>               struct amdgpu_gfx_shadow_info shadow_info;
>  
>               if (adev->gfx.funcs->get_gfx_shadow_info) {
> -                     adev->gfx.funcs->get_gfx_shadow_info(adev, 
> &shadow_info, true);
> +                     adev->gfx.funcs->get_gfx_shadow_info(adev,
> +                                                          &shadow_info, 
> true);
>               } else {
>                       r = -EINVAL;
>                       goto free_mqd;
>               }
>  
> -             if (mqd_user->mqd_size != sizeof(*mqd_gfx_v11) || 
> !mqd_user->mqd) {
> +             if (mqd_user->mqd_size != sizeof(*mqd_gfx_v11) ||
> +                 !mqd_user->mqd) {
>                       DRM_ERROR("Invalid GFX MQD\n");
>                       r = -EINVAL;
>                       goto free_mqd;
>               }
>  
> -             mqd_gfx_v11 = memdup_user(u64_to_user_ptr(mqd_user->mqd), 
> mqd_user->mqd_size);
> +             mqd_gfx_v11 = memdup_user(u64_to_user_ptr(mqd_user->mqd),
> +                                       mqd_user->mqd_size);
>               if (IS_ERR(mqd_gfx_v11)) {
>                       r = PTR_ERR(mqd_gfx_v11);
>                       goto free_mqd;
> @@ -465,7 +519,9 @@ static int mes_userq_mqd_create(struct 
> amdgpu_usermode_queue *queue,
>                       kfree(mqd_gfx_v11);
>                       goto free_mqd;
>               }
> -             r = amdgpu_userq_input_va_validate(adev, queue, 
> mqd_gfx_v11->shadow_va,
> +
> +             r = amdgpu_userq_input_va_validate(adev, queue,
> +                                                mqd_gfx_v11->shadow_va,
>                                                  shadow_info.shadow_size,
>                                                  &queue->userq_vas.va.shadow);
>               if (r) {
> @@ -474,7 +530,8 @@ static int mes_userq_mqd_create(struct 
> amdgpu_usermode_queue *queue,
>                       goto free_mqd;
>               }
>  
> -             r = amdgpu_userq_input_va_validate(adev, queue, 
> mqd_gfx_v11->csa_va,
> +             r = amdgpu_userq_input_va_validate(adev, queue,
> +                                                mqd_gfx_v11->csa_va,
>                                                  shadow_info.csa_size,
>                                                  &queue->userq_vas.va.csa);
>               amdgpu_bo_unreserve(queue->vm->root.bo);
> @@ -487,13 +544,15 @@ static int mes_userq_mqd_create(struct 
> amdgpu_usermode_queue *queue,
>       } else if (queue->queue_type == AMDGPU_HW_IP_DMA) {
>               struct drm_amdgpu_userq_mqd_sdma_gfx11 *mqd_sdma_v11;
>  
> -             if (mqd_user->mqd_size != sizeof(*mqd_sdma_v11) || 
> !mqd_user->mqd) {
> +             if (mqd_user->mqd_size != sizeof(*mqd_sdma_v11) ||
> +                 !mqd_user->mqd) {
>                       DRM_ERROR("Invalid SDMA MQD\n");
>                       r = -EINVAL;
>                       goto free_mqd;
>               }
>  
> -             mqd_sdma_v11 = memdup_user(u64_to_user_ptr(mqd_user->mqd), 
> mqd_user->mqd_size);
> +             mqd_sdma_v11 = memdup_user(u64_to_user_ptr(mqd_user->mqd),
> +                                        mqd_user->mqd_size);
>               if (IS_ERR(mqd_sdma_v11)) {
>                       r = PTR_ERR(mqd_sdma_v11);
>                       goto free_mqd;
> @@ -504,7 +563,9 @@ static int mes_userq_mqd_create(struct 
> amdgpu_usermode_queue *queue,
>                       kfree(mqd_sdma_v11);
>                       goto free_mqd;
>               }
> -             r = amdgpu_userq_input_va_validate(adev, queue, 
> mqd_sdma_v11->csa_va,
> +
> +             r = amdgpu_userq_input_va_validate(adev, queue,
> +                                                mqd_sdma_v11->csa_va,
>                                                  32,
>                                                  &queue->userq_vas.va.csa);
>               amdgpu_bo_unreserve(queue->vm->root.bo);
> @@ -519,7 +580,8 @@ static int mes_userq_mqd_create(struct 
> amdgpu_usermode_queue *queue,
>  
>       queue->userq_prop = userq_props;
>  
> -     r = mqd_hw_default->init_mqd(adev, (void *)queue->mqd.cpu_ptr, 
> userq_props);
> +     r = mqd_hw_default->init_mqd(adev, (void *)queue->mqd.cpu_ptr,
> +                                  userq_props);
>       if (r) {
>               DRM_ERROR("Failed to initialize MQD for userqueue\n");
>               goto free_mqd;
> @@ -528,7 +590,8 @@ static int mes_userq_mqd_create(struct 
> amdgpu_usermode_queue *queue,
>       /* Create per-process MES process context BO */
>       r = mes_userq_create_proc_ctx_space(uq_mgr);
>       if (r) {
> -             DRM_ERROR("Failed to allocate MES process context space bo, 
> error: %d\n", r);
> +             DRM_ERROR("Failed to allocate MES process context space bo, 
> error: %d\n",
> +                       r);
>               goto free_mqd;
>       }
>  
> @@ -540,7 +603,8 @@ static int mes_userq_mqd_create(struct 
> amdgpu_usermode_queue *queue,
>       }
>  
>       /* FW expects WPTR BOs to be mapped into GART */
> -     r = mes_userq_create_wptr_mapping(adev, uq_mgr, queue, 
> userq_props->wptr_gpu_addr);
> +     r = mes_userq_create_wptr_mapping(adev, uq_mgr, queue,
> +                                       userq_props->wptr_gpu_addr);
>       if (r) {
>               DRM_ERROR("Failed to create WPTR mapping\n");
>               goto free_ctx;

Reply via email to