aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/1398-Reserve-PD-BO-along-with-BO-together-when-add_bo_to_.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/1398-Reserve-PD-BO-along-with-BO-together-when-add_bo_to_.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/1398-Reserve-PD-BO-along-with-BO-together-when-add_bo_to_.patch90
1 files changed, 90 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/1398-Reserve-PD-BO-along-with-BO-together-when-add_bo_to_.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/1398-Reserve-PD-BO-along-with-BO-together-when-add_bo_to_.patch
new file mode 100644
index 00000000..083084f3
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/1398-Reserve-PD-BO-along-with-BO-together-when-add_bo_to_.patch
@@ -0,0 +1,90 @@
+From 4cc4e9bbef35849571e199565cde3cad8100be9e Mon Sep 17 00:00:00 2001
+From: Yong Zhao <yong.zhao@amd.com>
+Date: Thu, 21 Apr 2016 14:42:57 -0400
+Subject: [PATCH 1398/4131] Reserve PD BO along with BO together when
+ add_bo_to_vm()
+
+Change-Id: Icd82c9a2f6d912a6767f636bf4207e43b6d8f17a
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 22 ++++++++--------------
+ 1 file changed, 8 insertions(+), 14 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+index 4f7219a..e1e83b4 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+@@ -91,8 +91,6 @@ static int add_bo_to_vm(struct amdgpu_device *adev, struct kgd_mem *mem,
+ pr_debug("amdkfd: adding bo_va to bo %p and va 0x%llx id 0x%x\n",
+ bo, va, adev->dev->id);
+
+- amdgpu_bo_reserve(bo, true);
+-
+ /* Add BO to VM internal data structures*/
+ bo_va_entry->bo_va = amdgpu_vm_bo_add(adev, avm, bo);
+ if (bo_va_entry->bo_va == NULL) {
+@@ -119,8 +117,6 @@ static int add_bo_to_vm(struct amdgpu_device *adev, struct kgd_mem *mem,
+ goto err_vmsetaddr;
+ }
+
+- amdgpu_bo_unreserve(bo);
+-
+ bo_va_entry->kgd_dev = (void *)adev;
+ bo_va_entry->is_mapped = false;
+ list_add(&bo_va_entry->bo_list, list_bo_va);
+@@ -134,7 +130,6 @@ static int add_bo_to_vm(struct amdgpu_device *adev, struct kgd_mem *mem,
+ * we don't call it here. That can wait until the next time
+ * the page tables are updated for a map or unmap. */
+ err_vmadd:
+- amdgpu_bo_unreserve(bo);
+ kfree(bo_va_entry);
+ return ret;
+ }
+@@ -841,6 +836,10 @@ int amdgpu_amdkfd_gpuvm_map_memory_to_gpu(
+ pr_debug("amdgpu: try to map VA 0x%llx domain %d\n",
+ mem->data2.va, domain);
+
++ ret = reserve_bo_and_vms(mem, vm, false, &ctx);
++ if (unlikely(ret != 0))
++ goto bo_reserve_failed;
++
+ if (check_if_add_bo_to_vm((struct amdgpu_vm *)vm, mem)) {
+ pr_debug("amdkfd: add new BO_VA to list 0x%llx\n",
+ mem->data2.va);
+@@ -856,10 +855,6 @@ int amdgpu_amdkfd_gpuvm_map_memory_to_gpu(
+ }
+
+ if (!mem->data2.evicted) {
+- ret = reserve_bo_and_vms(mem, vm, false, &ctx);
+- if (unlikely(ret != 0))
+- goto bo_reserve_failed;
+-
+ ret = update_user_pages(mem, current->mm, &ctx);
+ if (ret != 0)
+ goto update_user_pages_failed;
+@@ -905,8 +900,8 @@ int amdgpu_amdkfd_gpuvm_map_memory_to_gpu(
+ }
+ }
+
+- if (!mem->data2.evicted)
+- unreserve_bo_and_vms(&ctx, true);
++ unreserve_bo_and_vms(&ctx, true);
++
+ mutex_unlock(&mem->data2.lock);
+ return 0;
+
+@@ -915,10 +910,9 @@ int amdgpu_amdkfd_gpuvm_map_memory_to_gpu(
+ pin_bo_failed:
+ quiesce_failed:
+ update_user_pages_failed:
+- if (!mem->data2.evicted)
+- unreserve_bo_and_vms(&ctx, false);
+-bo_reserve_failed:
+ add_bo_to_vm_failed:
++ unreserve_bo_and_vms(&ctx, false);
++bo_reserve_failed:
+ mutex_unlock(&mem->data2.lock);
+ return ret;
+ }
+--
+2.7.4
+