aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4722-drm-amdgpu-move-VM-eviction-decision-into-amdgpu_vm..patch
diff options
context:
space:
mode:
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..patch86
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
+