[PATCH 2/2] drm/amdgpu: move shadow_list to amdgpu_bo_vm

Christian König christian.koenig at amd.com
Tue Jun 15 06:55:29 UTC 2021


Am 14.06.21 um 21:26 schrieb Nirmoy Das:
> Move shadow_list to struct amdgpu_bo_vm as shadow BOs
> are part of PT/PD BOs.
>
> Signed-off-by: Nirmoy Das <nirmoy.das at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |  5 +++--
>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 13 +++++++------
>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.h |  6 ++----
>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c     |  2 +-
>   4 files changed, 13 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index f2636f411a25..3f51b142fc83 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -4063,6 +4063,7 @@ static int amdgpu_device_recover_vram(struct amdgpu_device *adev)
>   {
>   	struct dma_fence *fence = NULL, *next = NULL;
>   	struct amdgpu_bo *shadow;
> +	struct amdgpu_bo_vm *vmbo;
>   	long r = 1, tmo;
>   
>   	if (amdgpu_sriov_runtime(adev))
> @@ -4072,8 +4073,8 @@ static int amdgpu_device_recover_vram(struct amdgpu_device *adev)
>   
>   	dev_info(adev->dev, "recover vram bo from shadow start\n");
>   	mutex_lock(&adev->shadow_list_lock);
> -	list_for_each_entry(shadow, &adev->shadow_list, shadow_list) {
> -
> +	list_for_each_entry(vmbo, &adev->shadow_list, shadow_list) {
> +		shadow = &vmbo->bo;
>   		/* No need to recover an evicted BO */
>   		if (shadow->tbo.mem.mem_type != TTM_PL_TT ||
>   		    shadow->tbo.mem.start == AMDGPU_BO_INVALID_OFFSET ||
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> index f4f57a73d095..9f1e6bd8601b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> @@ -111,12 +111,13 @@ static void amdgpu_bo_vm_destroy(struct ttm_buffer_object *tbo)
>   {
>   	struct amdgpu_device *adev = amdgpu_ttm_adev(tbo->bdev);
>   	struct amdgpu_bo *bo = ttm_to_amdgpu_bo(tbo);
> +	struct amdgpu_bo_vm *vmbo = to_amdgpu_bo_vm(bo);
>   
>   	amdgpu_bo_destroy_base(tbo);
>   	/* in case amdgpu_device_recover_vram got NULL of bo->parent */
> -	if (!list_empty(&bo->shadow_list)) {
> +	if (!list_empty(&vmbo->shadow_list)) {
>   		mutex_lock(&adev->shadow_list_lock);
> -		list_del_init(&bo->shadow_list);
> +		list_del_init(&vmbo->shadow_list);
>   		mutex_unlock(&adev->shadow_list_lock);
>   	}
>   
> @@ -592,7 +593,6 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
>   	if (bo == NULL)
>   		return -ENOMEM;
>   	drm_gem_private_object_init(adev_to_drm(adev), &bo->tbo.base, size);
> -	INIT_LIST_HEAD(&bo->shadow_list);
>   	bo->vm_bo = NULL;
>   	bo->preferred_domains = bp->preferred_domain ? bp->preferred_domain :
>   		bp->domain;
> @@ -722,6 +722,7 @@ int amdgpu_bo_create_vm(struct amdgpu_device *adev,
>   		return r;
>   
>   	*vmbo_ptr = to_amdgpu_bo_vm(bo_ptr);
> +	INIT_LIST_HEAD(&(*vmbo_ptr)->shadow_list);
>   	return r;
>   }
>   
> @@ -766,12 +767,12 @@ int amdgpu_bo_validate(struct amdgpu_bo *bo)
>    *
>    * Insert a BO to the shadow list.
>    */
> -void amdgpu_bo_add_to_shadow_list(struct amdgpu_bo *bo)
> +void amdgpu_bo_add_to_shadow_list(struct amdgpu_bo_vm *vmbo)
>   {
> -	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
> +	struct amdgpu_device *adev = amdgpu_ttm_adev(vmbo->bo.tbo.bdev);
>   
>   	mutex_lock(&adev->shadow_list_lock);
> -	list_add_tail(&bo->shadow_list, &adev->shadow_list);
> +	list_add_tail(&vmbo->shadow_list, &adev->shadow_list);
>   	mutex_unlock(&adev->shadow_list_lock);
>   }
>   
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> index a8c702634e1b..18cb2f28e4de 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> @@ -109,9 +109,6 @@ struct amdgpu_bo {
>   #ifdef CONFIG_MMU_NOTIFIER
>   	struct mmu_interval_notifier	notifier;
>   #endif
> -
> -	struct list_head		shadow_list;
> -
>   	struct kgd_mem                  *kfd_bo;
>   };
>   
> @@ -127,6 +124,7 @@ struct amdgpu_bo_user {
>   struct amdgpu_bo_vm {
>   	struct amdgpu_bo		bo;
>   	struct amdgpu_bo		*shadow;
> +	struct list_head		shadow_list;

We would actually need an amdgpu_bo_shadow for this, but not in this 
patch probably.

Christian.

>   	struct amdgpu_vm_bo_base        entries[];
>   };
>   
> @@ -333,7 +331,7 @@ u64 amdgpu_bo_gpu_offset_no_check(struct amdgpu_bo *bo);
>   int amdgpu_bo_validate(struct amdgpu_bo *bo);
>   void amdgpu_bo_get_memory(struct amdgpu_bo *bo, uint64_t *vram_mem,
>   				uint64_t *gtt_mem, uint64_t *cpu_mem);
> -void amdgpu_bo_add_to_shadow_list(struct amdgpu_bo *bo);
> +void amdgpu_bo_add_to_shadow_list(struct amdgpu_bo_vm *vmbo);
>   int amdgpu_bo_restore_shadow(struct amdgpu_bo *shadow,
>   			     struct dma_fence **fence);
>   uint32_t amdgpu_bo_get_preferred_pin_domain(struct amdgpu_device *adev,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index 4c4c56581780..812c225538a7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -936,7 +936,7 @@ static int amdgpu_vm_pt_create(struct amdgpu_device *adev,
>   	}
>   
>   	(*vmbo)->shadow->parent = amdgpu_bo_ref(bo);
> -	amdgpu_bo_add_to_shadow_list((*vmbo)->shadow);
> +	amdgpu_bo_add_to_shadow_list((*vmbo));
>   
>   	return 0;
>   }



More information about the amd-gfx mailing list