aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4299-drm-amdgpu-abstract-bo_base-init-function.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4299-drm-amdgpu-abstract-bo_base-init-function.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4299-drm-amdgpu-abstract-bo_base-init-function.patch148
1 files changed, 148 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4299-drm-amdgpu-abstract-bo_base-init-function.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4299-drm-amdgpu-abstract-bo_base-init-function.patch
new file mode 100644
index 00000000..e731b739
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4299-drm-amdgpu-abstract-bo_base-init-function.patch
@@ -0,0 +1,148 @@
+From 7791169a4e436b4414797b2cc9ae40c5290c26ee Mon Sep 17 00:00:00 2001
+From: Chunming Zhou <david1.zhou@amd.com>
+Date: Tue, 24 Apr 2018 12:14:39 +0800
+Subject: [PATCH 4299/5725] drm/amdgpu: abstract bo_base init function
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Change-Id: I6eb1f509c83fc0c5f03563afd230bbcd9308a3d0
+Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 73 ++++++++++++++++++----------------
+ 1 file changed, 38 insertions(+), 35 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+index edf2559..dd84ed4 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+@@ -94,6 +94,36 @@ struct amdgpu_prt_cb {
+ struct dma_fence_cb cb;
+ };
+
++static void amdgpu_vm_bo_base_init(struct amdgpu_vm_bo_base *base,
++ struct amdgpu_vm *vm,
++ struct amdgpu_bo *bo)
++{
++ base->vm = vm;
++ base->bo = bo;
++ INIT_LIST_HEAD(&base->bo_list);
++ INIT_LIST_HEAD(&base->vm_status);
++
++ if (!bo)
++ return;
++ list_add_tail(&base->bo_list, &bo->va);
++
++ if (bo->tbo.resv != vm->root.base.bo->tbo.resv)
++ return;
++
++ if (bo->preferred_domains &
++ amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type))
++ return;
++
++ /*
++ * we checked all the prerequisites, but it looks like this per vm bo
++ * is currently evicted. add the bo to the evicted list to make sure it
++ * is validated on next vm use to avoid fault.
++ * */
++ spin_lock(&vm->status_lock);
++ list_move_tail(&base->vm_status, &vm->evicted);
++ spin_unlock(&vm->status_lock);
++}
++
+ /**
+ * amdgpu_vm_level_shift - return the addr shift for each level
+ *
+@@ -447,11 +477,9 @@ static int amdgpu_vm_alloc_levels(struct amdgpu_device *adev,
+ */
+ pt->parent = amdgpu_bo_ref(parent->base.bo);
+
+- entry->base.vm = vm;
+- entry->base.bo = pt;
+- list_add_tail(&entry->base.bo_list, &pt->va);
++ amdgpu_vm_bo_base_init(&entry->base, vm, pt);
+ spin_lock(&vm->status_lock);
+- list_add(&entry->base.vm_status, &vm->relocated);
++ list_move(&entry->base.vm_status, &vm->relocated);
+ spin_unlock(&vm->status_lock);
+ }
+
+@@ -1871,36 +1899,12 @@ struct amdgpu_bo_va *amdgpu_vm_bo_add(struct amdgpu_device *adev,
+ if (bo_va == NULL) {
+ return NULL;
+ }
+- bo_va->base.vm = vm;
+- bo_va->base.bo = bo;
+- INIT_LIST_HEAD(&bo_va->base.bo_list);
+- INIT_LIST_HEAD(&bo_va->base.vm_status);
++ amdgpu_vm_bo_base_init(&bo_va->base, vm, bo);
+
+ bo_va->ref_count = 1;
+ INIT_LIST_HEAD(&bo_va->valids);
+ INIT_LIST_HEAD(&bo_va->invalids);
+
+- if (!bo)
+- return bo_va;
+-
+- list_add_tail(&bo_va->base.bo_list, &bo->va);
+-
+- if (bo->tbo.resv != vm->root.base.bo->tbo.resv)
+- return bo_va;
+-
+- if (bo->preferred_domains &
+- amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type))
+- return bo_va;
+-
+- /*
+- * We checked all the prerequisites, but it looks like this per VM BO
+- * is currently evicted. add the BO to the evicted list to make sure it
+- * is validated on next VM use to avoid fault.
+- * */
+- spin_lock(&vm->status_lock);
+- list_move_tail(&bo_va->base.vm_status, &vm->evicted);
+- spin_unlock(&vm->status_lock);
+-
+ return bo_va;
+ }
+
+@@ -2419,6 +2423,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
+ int vm_context, unsigned int pasid)
+ {
+ struct amdgpu_bo_param bp;
++ struct amdgpu_bo *root;
+ const unsigned align = min(AMDGPU_VM_PTB_ALIGN_SIZE,
+ AMDGPU_VM_PTE_COUNT(adev) * 8);
+ unsigned ring_instance;
+@@ -2480,23 +2485,21 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
+ bp.flags = flags;
+ bp.type = ttm_bo_type_kernel;
+ bp.resv = NULL;
+- r = amdgpu_bo_create(adev, &bp, &vm->root.base.bo);
++ r = amdgpu_bo_create(adev, &bp, &root);
+ if (r)
+ goto error_free_sched_entity;
+
+- r = amdgpu_bo_reserve(vm->root.base.bo, true);
++ r = amdgpu_bo_reserve(root, true);
+ if (r)
+ goto error_free_root;
+
+- r = amdgpu_vm_clear_bo(adev, vm, vm->root.base.bo,
++ r = amdgpu_vm_clear_bo(adev, vm, root,
+ adev->vm_manager.root_level,
+ vm->pte_support_ats);
+ if (r)
+ goto error_unreserve;
+
+- vm->root.base.vm = vm;
+- list_add_tail(&vm->root.base.bo_list, &vm->root.base.bo->va);
+- list_add_tail(&vm->root.base.vm_status, &vm->evicted);
++ amdgpu_vm_bo_base_init(&vm->root.base, vm, root);
+ amdgpu_bo_unreserve(vm->root.base.bo);
+
+ if (pasid) {
+--
+2.7.4
+