Move shadow_list to struct amdgpu_bo_vm as shadow BOs
are part of PT/PD BOs.

Signed-off-by: Nirmoy Das <nirmoy....@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 d97c20346a8c..cb543e8abe35 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);
        }
 
@@ -594,7 +595,6 @@ static int amdgpu_bo_do_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;
@@ -737,6 +737,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;
 }
 
@@ -781,12 +782,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 e36b84516b4e..a08a34351f12 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
@@ -108,9 +108,6 @@ struct amdgpu_bo {
 #ifdef CONFIG_MMU_NOTIFIER
        struct mmu_interval_notifier    notifier;
 #endif
-
-       struct list_head                shadow_list;
-
        struct kgd_mem                  *kfd_bo;
 };
 
@@ -126,6 +123,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[];
 };
 
@@ -332,7 +330,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;
 }
-- 
2.31.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to