aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1625-drm-amdgpu-Wait-for-newly-allocated-PTs-to-be-idle.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1625-drm-amdgpu-Wait-for-newly-allocated-PTs-to-be-idle.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1625-drm-amdgpu-Wait-for-newly-allocated-PTs-to-be-idle.patch82
1 files changed, 82 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1625-drm-amdgpu-Wait-for-newly-allocated-PTs-to-be-idle.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1625-drm-amdgpu-Wait-for-newly-allocated-PTs-to-be-idle.patch
new file mode 100644
index 00000000..6018bcfe
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1625-drm-amdgpu-Wait-for-newly-allocated-PTs-to-be-idle.patch
@@ -0,0 +1,82 @@
+From 9b64db5c2770d744329667f847c51d72eb97516c Mon Sep 17 00:00:00 2001
+From: Felix Kuehling <Felix.Kuehling@amd.com>
+Date: Wed, 13 Mar 2019 08:30:48 -0400
+Subject: [PATCH 1625/2940] drm/amdgpu: Wait for newly allocated PTs to be idle
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+When page table are updated by the CPU, synchronize with the
+allocation and initialization of newly allocated page tables.
+
+Change-Id: I3df65aa1fb56f9e9581140c361250aa37996a119
+Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 20 +++++++++++++-------
+ 1 file changed, 13 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+index 688ebc71c6c1..14c6a0af7ada 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+@@ -873,17 +873,17 @@ static void amdgpu_vm_bo_param(struct amdgpu_device *adev, struct amdgpu_vm *vm,
+ }
+
+ /**
+- * amdgpu_vm_alloc_pts - Allocate page tables.
++ * amdgpu_vm_alloc_pts - Allocate a specific page table
+ *
+ * @adev: amdgpu_device pointer
+ * @vm: VM to allocate page tables for
+- * @saddr: Start address which needs to be allocated
+- * @size: Size from start address we need.
++ * @cursor: Which page table to allocate
+ *
+- * Make sure the page directories and page tables are allocated
++ * Make sure a specific page table or directory is allocated.
+ *
+ * Returns:
+- * 0 on success, errno otherwise.
++ * 1 if page table needed to be allocated, 0 if page table was already
++ * allocated, negative errno if an error occurred.
+ */
+ static int amdgpu_vm_alloc_pts(struct amdgpu_device *adev,
+ struct amdgpu_vm *vm,
+@@ -930,7 +930,7 @@ static int amdgpu_vm_alloc_pts(struct amdgpu_device *adev,
+ if (r)
+ goto error_free_pt;
+
+- return 0;
++ return 1;
+
+ error_free_pt:
+ amdgpu_bo_unref(&pt->shadow);
+@@ -1587,10 +1587,12 @@ static int amdgpu_vm_update_ptes(struct amdgpu_pte_update_params *params,
+ unsigned shift, parent_shift, mask;
+ uint64_t incr, entry_end, pe_start;
+ struct amdgpu_bo *pt;
++ bool need_to_sync;
+
+ r = amdgpu_vm_alloc_pts(params->adev, params->vm, &cursor);
+- if (r)
++ if (r < 0)
+ return r;
++ need_to_sync = (r && params->vm->use_cpu_for_update);
+
+ pt = cursor.entry->base.bo;
+
+@@ -1638,6 +1640,10 @@ static int amdgpu_vm_update_ptes(struct amdgpu_pte_update_params *params,
+ entry_end += cursor.pfn & ~(entry_end - 1);
+ entry_end = min(entry_end, end);
+
++ if (need_to_sync)
++ r = amdgpu_bo_sync_wait(params->vm->root.base.bo,
++ AMDGPU_FENCE_OWNER_VM, true);
++
+ do {
+ uint64_t upd_end = min(entry_end, frag_end);
+ unsigned nptes = (upd_end - frag_start) >> shift;
+--
+2.17.1
+