Change-Id: I1179a21aa3712b095fd50bed6956654e0f72e611 Signed-off-by: Chunming Zhou <david1.zhou at amd.com> --- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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); } -- 2.14.1