aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2940-drm-amdgpu-remove-keeping-the-addr-of-the-VM-PDs.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2940-drm-amdgpu-remove-keeping-the-addr-of-the-VM-PDs.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2940-drm-amdgpu-remove-keeping-the-addr-of-the-VM-PDs.patch92
1 files changed, 92 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2940-drm-amdgpu-remove-keeping-the-addr-of-the-VM-PDs.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2940-drm-amdgpu-remove-keeping-the-addr-of-the-VM-PDs.patch
new file mode 100644
index 00000000..ee9952c4
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2940-drm-amdgpu-remove-keeping-the-addr-of-the-VM-PDs.patch
@@ -0,0 +1,92 @@
+From e9868117babf16d21b5bafe06893d0df5dae4ae9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Thu, 30 Nov 2017 15:41:28 +0100
+Subject: [PATCH 2940/4131] drm/amdgpu: remove keeping the addr of the VM PDs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+No more double house keeping.
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Chunming Zhou <david1.zhou@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 13 ++++---------
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 2 +-
+ 2 files changed, 5 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+index 733caae..a715ee8 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+@@ -392,7 +392,6 @@ static int amdgpu_vm_alloc_levels(struct amdgpu_device *adev,
+ spin_lock(&vm->status_lock);
+ list_add(&entry->base.vm_status, &vm->relocated);
+ spin_unlock(&vm->status_lock);
+- entry->addr = 0;
+ }
+
+ if (level < adev->vm_manager.num_level) {
+@@ -1134,15 +1133,12 @@ static int amdgpu_vm_update_pde(struct amdgpu_device *adev,
+ pt = amdgpu_bo_gpu_offset(bo);
+ pt = amdgpu_gart_get_vm_pde(adev, pt);
+ /* Don't update huge pages here */
+- if (entry->addr & AMDGPU_PDE_PTE ||
+- entry->addr == (pt | AMDGPU_PTE_VALID)) {
++ if (entry->huge) {
+ if (!vm->use_cpu_for_update)
+ amdgpu_job_free(job);
+ return 0;
+ }
+
+- entry->addr = pt | AMDGPU_PTE_VALID;
+-
+ if (shadow) {
+ pde = shadow_addr + (entry - parent->entries) * 8;
+ params.func(&params, pde, pt, 1, 0, AMDGPU_PTE_VALID);
+@@ -1208,7 +1204,6 @@ static void amdgpu_vm_invalidate_level(struct amdgpu_device *adev,
+ if (!entry->base.bo)
+ continue;
+
+- entry->addr = ~0ULL;
+ spin_lock(&vm->status_lock);
+ if (list_empty(&entry->base.vm_status))
+ list_add(&entry->base.vm_status, &vm->relocated);
+@@ -1341,10 +1336,10 @@ static void amdgpu_vm_handle_huge_pages(struct amdgpu_pte_update_params *p,
+ flags |= AMDGPU_PDE_PTE;
+ }
+
+- if (entry->addr == (dst | flags))
++ if (!entry->huge && !(flags & AMDGPU_PDE_PTE))
+ return;
+
+- entry->addr = (dst | flags);
++ entry->huge = !!(flags & AMDGPU_PDE_PTE);
+
+ if (use_cpu_update) {
+ /* In case a huge page is replaced with a system
+@@ -1418,7 +1413,7 @@ static int amdgpu_vm_update_ptes(struct amdgpu_pte_update_params *params,
+ amdgpu_vm_handle_huge_pages(params, entry, parent,
+ nptes, dst, flags);
+ /* We don't need to update PTEs for huge pages */
+- if (entry->addr & AMDGPU_PDE_PTE)
++ if (entry->huge)
+ continue;
+
+ pt = entry->base.bo;
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
+index 6653278..b5988f6 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
+@@ -142,7 +142,7 @@ struct amdgpu_vm_bo_base {
+
+ struct amdgpu_vm_pt {
+ struct amdgpu_vm_bo_base base;
+- uint64_t addr;
++ bool huge;
+
+ /* array of page tables, one for each directory entry */
+ struct amdgpu_vm_pt *entries;
+--
+2.7.4
+