[12/13] drm/amdgpu: transferred bo doesn't use vm lru

Submitted by Zhou, David(ChunMing) on May 9, 2018, 6:45 a.m.

Details

Message ID 20180509064543.15937-13-david1.zhou@amd.com
State New
Headers show
Series "*** per vm lru ***" ( rev: 1 ) in AMD X.Org drivers

Not browsing as part of any series.

Commit Message

Zhou, David(ChunMing) May 9, 2018, 6:45 a.m.
Change-Id: I1179a21aa3712b095fd50bed6956654e0f72e611
Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

Patch hide | download patch | download mbox

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 537f04d25535..a425d498f3fc 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -255,9 +255,15 @@  void amdgpu_vm_add_to_lru(struct ttm_buffer_object *bo)
 	struct ttm_bo_device *bdev = bo->bdev;
 	struct amdgpu_bo *abo = ttm_to_amdgpu_bo(bo);
 	struct amdgpu_vm_lru *vm_lru = abo->vm_lru;
+	struct ttm_mem_type_manager *man;
 
 	if (!(bo->mem.placement & TTM_PL_FLAG_NO_EVICT)) {
-		if (bo->resv == vm_lru->resv)
+		if (bo->destroy == ttm_transfered_destroy) {
+			BUG_ON(!list_empty(&bo->lru));
+
+			man = &bdev->man[bo->mem.mem_type];
+			list_add_tail(&bo->lru, &man->lru[bo->priority]);
+		} else if (bo->resv == vm_lru->resv)
 			amdgpu_vm_bo_add_to_rb(abo, &vm_lru->fixed_lru[bo->mem.mem_type][bo->priority]);
 		else
 			list_add_tail(&bo->lru, &vm_lru->dynamic_lru[bo->mem.mem_type][bo->priority]);
@@ -297,6 +303,8 @@  void amdgpu_vm_del_from_lru(struct ttm_buffer_object *bo)
 	struct amdgpu_bo *abo = ttm_to_amdgpu_bo(bo);
 	struct amdgpu_vm_lru *vm_lru = abo->vm_lru;
 
+	if (bo->destroy == ttm_transfered_destroy)
+		return;
 	if (amdgpu_vm_bo_rb_find(&vm_lru->fixed_lru[bo->mem.mem_type][bo->priority],
 				 abo->index)) {
 		rb_erase(&abo->node,
@@ -311,6 +319,8 @@  void amdgpu_vm_move_to_lru_tail(struct ttm_buffer_object *bo)
 	struct amdgpu_vm_lru *vm_lru = abo->vm_lru;
 	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->bdev);
 
+	if (bo->destroy == ttm_transfered_destroy)
+		return;
 	if (bo->resv == vm_lru->resv)
                list_move_tail(&vm_lru->vm_lru_list, &adev->vm_lru_list);
 }