Gentle Ping

On 10/15/2024 11:51 AM, Zhu Lingshan wrote:
> This commit specifies data type struct amdkfd_process_info
> rather than general void* in ralted functions.
>
> kfd_process->kgd_process_info is initialized
> in init_kfd_vm() by such code:
>
> static int init_kfd_vm(struct amdgpu_vm *vm, void **process_info,
>                        struct dma_fence **ef) {
>         struct amdkfd_process_info *info = NULL;
>
>         if (!*process_info) {
>                 info = kzalloc(sizeof(*info), GFP_KERNEL);
>
>         *process_info = info;
> }
>
> That means kfd_process->kgd_process_info is type
> struct amdkfd_process_info, therefore we should avoid using void*
>
> Using a specified data type other than void* can help improve
> readability. There are other benifits like: type safety,
> avoid casting and better compling chekings.
>
> Signed-off-by: Zhu Lingshan <[email protected]>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h    | 10 +++---
>  .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c  | 31 ++++++++-----------
>  drivers/gpu/drm/amd/amdkfd/kfd_priv.h         |  2 +-
>  3 files changed, 19 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> index f9d119448442..c1346b8c9ab7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> @@ -239,8 +239,8 @@ void amdgpu_amdkfd_free_gtt_mem(struct amdgpu_device 
> *adev, void **mem_obj);
>  int amdgpu_amdkfd_alloc_gws(struct amdgpu_device *adev, size_t size,
>                               void **mem_obj);
>  void amdgpu_amdkfd_free_gws(struct amdgpu_device *adev, void *mem_obj);
> -int amdgpu_amdkfd_add_gws_to_process(void *info, void *gws, struct kgd_mem 
> **mem);
> -int amdgpu_amdkfd_remove_gws_from_process(void *info, void *mem);
> +int amdgpu_amdkfd_add_gws_to_process(struct amdkfd_process_info *pinfo, void 
> *gws, struct kgd_mem **mem);
> +int amdgpu_amdkfd_remove_gws_from_process(struct amdkfd_process_info *pinfo, 
> void *mem);
>  uint32_t amdgpu_amdkfd_get_fw_version(struct amdgpu_device *adev,
>                                     enum kgd_engine_type type);
>  void amdgpu_amdkfd_get_local_mem_info(struct amdgpu_device *adev,
> @@ -299,7 +299,7 @@ int amdgpu_amdkfd_gpuvm_set_vm_pasid(struct amdgpu_device 
> *adev,
>                                    struct amdgpu_vm *avm, u32 pasid);
>  int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct amdgpu_device *adev,
>                                       struct amdgpu_vm *avm,
> -                                     void **process_info,
> +                                     struct amdkfd_process_info 
> **process_info,
>                                       struct dma_fence **ef);
>  void amdgpu_amdkfd_gpuvm_release_process_vm(struct amdgpu_device *adev,
>                                       void *drm_priv);
> @@ -348,8 +348,8 @@ void 
> amdgpu_amdkfd_ras_pasid_poison_consumption_handler(struct amdgpu_device *ad
>  
>  bool amdgpu_amdkfd_is_fed(struct amdgpu_device *adev);
>  bool amdgpu_amdkfd_bo_mapped_to_dev(void *drm_priv, struct kgd_mem *mem);
> -void amdgpu_amdkfd_block_mmu_notifications(void *p);
> -int amdgpu_amdkfd_criu_resume(void *p);
> +void amdgpu_amdkfd_block_mmu_notifications(struct amdkfd_process_info 
> *pinfo);
> +int amdgpu_amdkfd_criu_resume(struct amdkfd_process_info *pinfo);
>  int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev,
>               uint64_t size, u32 alloc_flag, int8_t xcp_id);
>  void amdgpu_amdkfd_unreserve_mem_limit(struct amdgpu_device *adev,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> index ce5ca304dba9..2a1ee17e44a1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> @@ -1376,7 +1376,7 @@ static int process_update_pds(struct 
> amdkfd_process_info *process_info,
>       return 0;
>  }
>  
> -static int init_kfd_vm(struct amdgpu_vm *vm, void **process_info,
> +static int init_kfd_vm(struct amdgpu_vm *vm, struct amdkfd_process_info 
> **process_info,
>                      struct dma_fence **ef)
>  {
>       struct amdkfd_process_info *info = NULL;
> @@ -1552,7 +1552,7 @@ int amdgpu_amdkfd_gpuvm_set_vm_pasid(struct 
> amdgpu_device *adev,
>  
>  int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct amdgpu_device *adev,
>                                          struct amdgpu_vm *avm,
> -                                        void **process_info,
> +                                        struct amdkfd_process_info 
> **process_info,
>                                          struct dma_fence **ef)
>  {
>       int ret;
> @@ -1639,19 +1639,16 @@ uint64_t 
> amdgpu_amdkfd_gpuvm_get_process_page_dir(void *drm_priv)
>       return avm->pd_phys_addr;
>  }
>  
> -void amdgpu_amdkfd_block_mmu_notifications(void *p)
> +void amdgpu_amdkfd_block_mmu_notifications(struct amdkfd_process_info *pinfo)
>  {
> -     struct amdkfd_process_info *pinfo = (struct amdkfd_process_info *)p;
> -
>       mutex_lock(&pinfo->lock);
>       WRITE_ONCE(pinfo->block_mmu_notifications, true);
>       mutex_unlock(&pinfo->lock);
>  }
>  
> -int amdgpu_amdkfd_criu_resume(void *p)
> +int amdgpu_amdkfd_criu_resume(struct amdkfd_process_info *pinfo)
>  {
>       int ret = 0;
> -     struct amdkfd_process_info *pinfo = (struct amdkfd_process_info *)p;
>  
>       mutex_lock(&pinfo->lock);
>       pr_debug("scheduling work\n");
> @@ -3093,13 +3090,12 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void 
> *info, struct dma_fence __rcu *
>       return ret;
>  }
>  
> -int amdgpu_amdkfd_add_gws_to_process(void *info, void *gws, struct kgd_mem 
> **mem)
> +int amdgpu_amdkfd_add_gws_to_process(struct amdkfd_process_info *pinfo, void 
> *gws, struct kgd_mem **mem)
>  {
> -     struct amdkfd_process_info *process_info = (struct amdkfd_process_info 
> *)info;
>       struct amdgpu_bo *gws_bo = (struct amdgpu_bo *)gws;
>       int ret;
>  
> -     if (!info || !gws)
> +     if (!pinfo || !gws)
>               return -EINVAL;
>  
>       *mem = kzalloc(sizeof(struct kgd_mem), GFP_KERNEL);
> @@ -3110,8 +3106,8 @@ int amdgpu_amdkfd_add_gws_to_process(void *info, void 
> *gws, struct kgd_mem **mem
>       INIT_LIST_HEAD(&(*mem)->attachments);
>       (*mem)->bo = amdgpu_bo_ref(gws_bo);
>       (*mem)->domain = AMDGPU_GEM_DOMAIN_GWS;
> -     (*mem)->process_info = process_info;
> -     add_kgd_mem_to_kfd_bo_list(*mem, process_info, false);
> +     (*mem)->process_info = pinfo;
> +     add_kgd_mem_to_kfd_bo_list(*mem, pinfo, false);
>       amdgpu_sync_create(&(*mem)->sync);
>  
>  
> @@ -3136,7 +3132,7 @@ int amdgpu_amdkfd_add_gws_to_process(void *info, void 
> *gws, struct kgd_mem **mem
>       if (ret)
>               goto reserve_shared_fail;
>       dma_resv_add_fence(gws_bo->tbo.base.resv,
> -                        &process_info->eviction_fence->base,
> +                        &pinfo->eviction_fence->base,
>                          DMA_RESV_USAGE_BOOKKEEP);
>       amdgpu_bo_unreserve(gws_bo);
>       mutex_unlock(&(*mem)->process_info->lock);
> @@ -3149,7 +3145,7 @@ int amdgpu_amdkfd_add_gws_to_process(void *info, void 
> *gws, struct kgd_mem **mem
>  bo_reservation_failure:
>       mutex_unlock(&(*mem)->process_info->lock);
>       amdgpu_sync_free(&(*mem)->sync);
> -     remove_kgd_mem_from_kfd_bo_list(*mem, process_info);
> +     remove_kgd_mem_from_kfd_bo_list(*mem, pinfo);
>       amdgpu_bo_unref(&gws_bo);
>       mutex_destroy(&(*mem)->lock);
>       kfree(*mem);
> @@ -3157,17 +3153,16 @@ int amdgpu_amdkfd_add_gws_to_process(void *info, void 
> *gws, struct kgd_mem **mem
>       return ret;
>  }
>  
> -int amdgpu_amdkfd_remove_gws_from_process(void *info, void *mem)
> +int amdgpu_amdkfd_remove_gws_from_process(struct amdkfd_process_info *pinfo, 
> void *mem)
>  {
>       int ret;
> -     struct amdkfd_process_info *process_info = (struct amdkfd_process_info 
> *)info;
>       struct kgd_mem *kgd_mem = (struct kgd_mem *)mem;
>       struct amdgpu_bo *gws_bo = kgd_mem->bo;
>  
>       /* Remove BO from process's validate list so restore worker won't touch
>        * it anymore
>        */
> -     remove_kgd_mem_from_kfd_bo_list(kgd_mem, process_info);
> +     remove_kgd_mem_from_kfd_bo_list(kgd_mem, pinfo);
>  
>       ret = amdgpu_bo_reserve(gws_bo, false);
>       if (unlikely(ret)) {
> @@ -3176,7 +3171,7 @@ int amdgpu_amdkfd_remove_gws_from_process(void *info, 
> void *mem)
>               return ret;
>       }
>       amdgpu_amdkfd_remove_eviction_fence(gws_bo,
> -                     process_info->eviction_fence);
> +                     pinfo->eviction_fence);
>       amdgpu_bo_unreserve(gws_bo);
>       amdgpu_sync_free(&kgd_mem->sync);
>       amdgpu_bo_unref(&gws_bo);
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h 
> b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
> index d6530febabad..b0426a1235b8 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
> @@ -934,7 +934,7 @@ struct kfd_process {
>       bool signal_event_limit_reached;
>  
>       /* Information used for memory eviction */
> -     void *kgd_process_info;
> +     struct amdkfd_process_info *kgd_process_info;
>       /* Eviction fence that is attached to all the BOs of this process. The
>        * fence will be triggered during eviction and new one will be created
>        * during restore

Reply via email to