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

2021-06-15 Thread Das, Nirmoy


On 6/15/2021 1:57 PM, Christian König wrote:



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 
---
  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(>shadow_list_lock);
-    list_for_each_entry(shadow, >shadow_list, shadow_list) {
-
+    list_for_each_entry(vmbo, >shadow_list, shadow_list) {
+    shadow = >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(>shadow_list)) {
+    if (!list_empty(>shadow_list)) {
  mutex_lock(>shadow_list_lock);
-    list_del_init(>shadow_list);
+    list_del_init(>shadow_list);
  mutex_unlock(>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), >tbo.base, 
size);

-    INIT_LIST_HEAD(>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(>shadow_list_lock);
-    list_add_tail(>shadow_list, >shadow_list);
+    list_add_tail(>shadow_list, >shadow_list);
  mutex_unlock(>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 

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

2021-06-15 Thread Christian König



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 
---
  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(>shadow_list_lock);
-   list_for_each_entry(shadow, >shadow_list, shadow_list) {
-
+   list_for_each_entry(vmbo, >shadow_list, shadow_list) {
+   shadow = >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(>shadow_list)) {
+   if (!list_empty(>shadow_list)) {
mutex_lock(>shadow_list_lock);
-   list_del_init(>shadow_list);
+   list_del_init(>shadow_list);
mutex_unlock(>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), >tbo.base, size);
-   INIT_LIST_HEAD(>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(>shadow_list_lock);

-   list_add_tail(>shadow_list, >shadow_list);
+   list_add_tail(>shadow_list, >shadow_list);
mutex_unlock(>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_notifiernotifier;
  #endif
-
-   struct list_headshadow_list;
-
struct kgd_mem  *kfd_bo;
  };
  
@@ -127,6 +124,7 @@ struct amdgpu_bo_user {

  struct amdgpu_bo_vm {
struct amdgpu_bobo;
struct amdgpu_bo*shadow;
+   struct list_headshadow_list;
struct amdgpu_vm_bo_baseentries[];
  };
  
@@ -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
--- 

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

2021-06-15 Thread Nirmoy Das
Move shadow_list to struct amdgpu_bo_vm as shadow BOs
are part of PT/PD BOs.

Signed-off-by: Nirmoy Das 
---
 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(>shadow_list_lock);
-   list_for_each_entry(shadow, >shadow_list, shadow_list) {
-
+   list_for_each_entry(vmbo, >shadow_list, shadow_list) {
+   shadow = >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(>shadow_list)) {
+   if (!list_empty(>shadow_list)) {
mutex_lock(>shadow_list_lock);
-   list_del_init(>shadow_list);
+   list_del_init(>shadow_list);
mutex_unlock(>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), >tbo.base, size);
-   INIT_LIST_HEAD(>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(>shadow_list_lock);
-   list_add_tail(>shadow_list, >shadow_list);
+   list_add_tail(>shadow_list, >shadow_list);
mutex_unlock(>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_notifiernotifier;
 #endif
-
-   struct list_headshadow_list;
-
struct kgd_mem  *kfd_bo;
 };
 
@@ -127,6 +124,7 @@ struct amdgpu_bo_user {
 struct amdgpu_bo_vm {
struct amdgpu_bobo;
struct amdgpu_bo*shadow;
+   struct list_headshadow_list;
struct amdgpu_vm_bo_baseentries[];
 };
 
@@ -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
+++ 

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

2021-06-15 Thread Nirmoy Das
Move shadow_list to struct amdgpu_bo_vm as shadow BOs
are part of PT/PD BOs.

Signed-off-by: Nirmoy Das 
---
 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(>shadow_list_lock);
-   list_for_each_entry(shadow, >shadow_list, shadow_list) {
-
+   list_for_each_entry(vmbo, >shadow_list, shadow_list) {
+   shadow = >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 8473d153650f..7dbf711e41ce 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -108,11 +108,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(>shadow_list)) {
+   if (!list_empty(>shadow_list)) {
mutex_lock(>shadow_list_lock);
-   list_del_init(>shadow_list);
+   list_del_init(>shadow_list);
mutex_unlock(>shadow_list_lock);
}
 
@@ -588,7 +590,6 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
if (bo == NULL)
return -ENOMEM;
drm_gem_private_object_init(adev_to_drm(adev), >tbo.base, size);
-   INIT_LIST_HEAD(>shadow_list);
bo->vm_bo = NULL;
bo->preferred_domains = bp->preferred_domain ? bp->preferred_domain :
bp->domain;
@@ -718,6 +719,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;
 }
 
@@ -762,12 +764,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(>shadow_list_lock);
-   list_add_tail(>shadow_list, >shadow_list);
+   list_add_tail(>shadow_list, >shadow_list);
mutex_unlock(>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_notifiernotifier;
 #endif
-
-   struct list_headshadow_list;
-
struct kgd_mem  *kfd_bo;
 };
 
@@ -127,6 +124,7 @@ struct amdgpu_bo_user {
 struct amdgpu_bo_vm {
struct amdgpu_bobo;
struct amdgpu_bo*shadow;
+   struct list_headshadow_list;
struct amdgpu_vm_bo_baseentries[];
 };
 
@@ -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
+++ 

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

2021-06-15 Thread Christian König

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 
---
  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(>shadow_list_lock);
-   list_for_each_entry(shadow, >shadow_list, shadow_list) {
-
+   list_for_each_entry(vmbo, >shadow_list, shadow_list) {
+   shadow = >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(>shadow_list)) {
+   if (!list_empty(>shadow_list)) {
mutex_lock(>shadow_list_lock);
-   list_del_init(>shadow_list);
+   list_del_init(>shadow_list);
mutex_unlock(>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), >tbo.base, size);
-   INIT_LIST_HEAD(>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(>shadow_list_lock);

-   list_add_tail(>shadow_list, >shadow_list);
+   list_add_tail(>shadow_list, >shadow_list);
mutex_unlock(>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_notifiernotifier;
  #endif
-
-   struct list_headshadow_list;
-
struct kgd_mem  *kfd_bo;
  };
  
@@ -127,6 +124,7 @@ struct amdgpu_bo_user {

  struct amdgpu_bo_vm {
struct amdgpu_bobo;
struct amdgpu_bo*shadow;
+   struct list_headshadow_list;


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


Christian.


struct amdgpu_vm_bo_baseentries[];
  };
  
@@ -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