diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4722-drm-amdgpu-move-VM-eviction-decision-into-amdgpu_vm..patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4722-drm-amdgpu-move-VM-eviction-decision-into-amdgpu_vm..patch | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4722-drm-amdgpu-move-VM-eviction-decision-into-amdgpu_vm..patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4722-drm-amdgpu-move-VM-eviction-decision-into-amdgpu_vm..patch new file mode 100644 index 00000000..54f6b383 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4722-drm-amdgpu-move-VM-eviction-decision-into-amdgpu_vm..patch @@ -0,0 +1,86 @@ +From b15d2a4a2436144a11919630bde2a8d37e2b9cb8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> +Date: Thu, 28 Nov 2019 14:51:46 +0100 +Subject: [PATCH 4722/4736] drm/amdgpu: move VM eviction decision into + amdgpu_vm.c +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When a page tables needs to be evicted the VM code should +decide if that is possible or not. + +Change-Id: Ib9a934b37a39f06caeb15d7375fb1c4fc8f9b51c +Signed-off-by: Christian König <christian.koenig@amd.com> +Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 5 +---- + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 22 ++++++++++++++++++++++ + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 1 + + 3 files changed, 24 insertions(+), 4 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +index d93bfaca5daf..4e36ce46455f 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +@@ -1624,11 +1624,8 @@ static bool amdgpu_ttm_bo_eviction_valuable(struct ttm_buffer_object *bo, + struct dma_fence *f; + int i; + +- /* Don't evict VM page tables while they are busy, otherwise we can't +- * cleanly handle page faults. +- */ + if (bo->type == ttm_bo_type_kernel && +- !reservation_object_test_signaled_rcu(bo->resv, true)) ++ !amdgpu_vm_evictable(ttm_to_amdgpu_bo(bo))) + return false; + + /* If bo is a KFD BO, check if the bo belongs to the current process. +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +index 90ac5390ecdf..f47158087b83 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +@@ -2504,6 +2504,28 @@ void amdgpu_vm_bo_rmv(struct amdgpu_device *adev, + kfree(bo_va); + } + ++/** ++ * amdgpu_vm_evictable - check if we can evict a VM ++ * ++ * @bo: A page table of the VM. ++ * ++ * Check if it is possible to evict a VM. ++ */ ++bool amdgpu_vm_evictable(struct amdgpu_bo *bo) ++{ ++ struct amdgpu_vm_bo_base *bo_base = bo->vm_bo; ++ ++ /* Page tables of a destroyed VM can go away immediately */ ++ if (!bo_base || !bo_base->vm) ++ return true; ++ ++ /* Don't evict VM page tables while they are busy */ ++ if (!reservation_object_test_signaled_rcu(bo->tbo.resv, true)) ++ return false; ++ ++ return true; ++} ++ + /** + * amdgpu_vm_bo_invalidate - mark the bo as invalid + * +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h +index 76fcf853035c..db561765453b 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h +@@ -381,6 +381,7 @@ int amdgpu_vm_handle_moved(struct amdgpu_device *adev, + int amdgpu_vm_bo_update(struct amdgpu_device *adev, + struct amdgpu_bo_va *bo_va, + bool clear); ++bool amdgpu_vm_evictable(struct amdgpu_bo *bo); + void amdgpu_vm_bo_invalidate(struct amdgpu_device *adev, + struct amdgpu_bo *bo, bool evicted); + uint64_t amdgpu_vm_map_gart(const dma_addr_t *pages_addr, uint64_t addr); +-- +2.17.1 + |