aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1861-drm-amdgpu-Fix-VM-clean-check-method.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1861-drm-amdgpu-Fix-VM-clean-check-method.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1861-drm-amdgpu-Fix-VM-clean-check-method.patch77
1 files changed, 77 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1861-drm-amdgpu-Fix-VM-clean-check-method.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1861-drm-amdgpu-Fix-VM-clean-check-method.patch
new file mode 100644
index 00000000..1025e427
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1861-drm-amdgpu-Fix-VM-clean-check-method.patch
@@ -0,0 +1,77 @@
+From 95d639351f2b4379d3fb39b00ab97ea0a92a9549 Mon Sep 17 00:00:00 2001
+From: Trigger Huang <Trigger.Huang@amd.com>
+Date: Tue, 30 Apr 2019 22:00:31 +0800
+Subject: [PATCH 1861/2940] drm/amdgpu: Fix VM clean check method
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+amdgpu_vm_make_compute is used to turn a GFX VM into a compute VM,
+the prerequisite is this VM is clean. Let's check if some page tables
+are already filled , while not check if some mapping is already made.
+
+Signed-off-by: Trigger Huang <Trigger.Huang@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Chaudhary Amit Kumar <Chaudharyamit.Kumar@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 36 +++++++++++++++++++++++---
+ 1 file changed, 33 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+index 776ba87ac779..2ca2dbaf7e3a 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+@@ -2725,6 +2725,37 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
+ return r;
+ }
+
++/**
++ * amdgpu_vm_check_clean_reserved - check if a VM is clean
++ *
++ * @adev: amdgpu_device pointer
++ * @vm: the VM to check
++ *
++ * check all entries of the root PD, if any subsequent PDs are allocated,
++ * it means there are page table creating and filling, and is no a clean
++ * VM
++ *
++ * Returns:
++ * 0 if this VM is clean
++ */
++static int amdgpu_vm_check_clean_reserved(struct amdgpu_device *adev,
++ struct amdgpu_vm *vm)
++{
++ enum amdgpu_vm_level root = adev->vm_manager.root_level;
++ unsigned int entries = amdgpu_vm_num_entries(adev, root);
++ unsigned int i = 0;
++
++ if (!(vm->root.entries))
++ return 0;
++
++ for (i = 0; i < entries; i++) {
++ if (vm->root.entries[i].base.bo)
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
+ /**
+ * amdgpu_vm_make_compute - Turn a GFX VM into a compute VM
+ *
+@@ -2756,10 +2787,9 @@ int amdgpu_vm_make_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm)
+ return r;
+
+ /* Sanity checks */
+- if (!RB_EMPTY_ROOT(&vm->va.rb_root) || vm->root.entries) {
+- r = -EINVAL;
++ r = amdgpu_vm_check_clean_reserved(adev, vm);
++ if (r)
+ goto error;
+- }
+
+ /* Check if PD needs to be reinitialized and do it before
+ * changing any other state, in case it fails.
+--
+2.17.1
+