[PATCH 2/2] drm/amdgpu: move shadow_list to amdgpu_bo_vm
Christian König
christian.koenig at amd.com
Tue Jun 15 11:57:17 UTC 2021
Am 15.06.21 um 13:51 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 | 14 ++++++++------
> drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 6 ++----
> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 2 +-
> 4 files changed, 14 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 ea54fd739c41..ea339eaac399 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> @@ -103,11 +103,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;
>
> + vmbo = to_amdgpu_bo_vm(bo);
> /* 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);
> }
>
> @@ -583,7 +585,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;
> @@ -713,6 +714,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;
> }
>
> @@ -757,12 +759,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;
> 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));
You can drop the extra () pair here.
Apart from that the series is Reviewed-by: Christian König
<christian.koenig at amd.com>
Thanks,
Christian.
>
> return 0;
> }
More information about the amd-gfx
mailing list