aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0868-drm-amdgpu-add-support-for-per-VM-BOs-v2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0868-drm-amdgpu-add-support-for-per-VM-BOs-v2.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0868-drm-amdgpu-add-support-for-per-VM-BOs-v2.patch212
1 files changed, 0 insertions, 212 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0868-drm-amdgpu-add-support-for-per-VM-BOs-v2.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0868-drm-amdgpu-add-support-for-per-VM-BOs-v2.patch
deleted file mode 100644
index 5f462695..00000000
--- a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0868-drm-amdgpu-add-support-for-per-VM-BOs-v2.patch
+++ /dev/null
@@ -1,212 +0,0 @@
-From c7f6d5bc8e6e31660db22c165109a1e378f867a5 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
-Date: Wed, 16 Aug 2017 11:13:48 +0200
-Subject: [PATCH 0868/4131] drm/amdgpu: add support for per VM BOs v2
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Per VM BOs are handled like VM PDs and PTs. They are always valid and don't
-need to be specified in the BO lists.
-
-v2: validate PDs/PTs first
-
-Signed-off-by: Christian König <christian.koenig@amd.com>
-Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
----
- drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 +-
- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 79 ++++++++++++++++++++++++----------
- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 5 ++-
- 3 files changed, 60 insertions(+), 26 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
-index a2f7a70..ac0826c 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
-@@ -826,7 +826,7 @@ static int amdgpu_bo_vm_update_pte(struct amdgpu_cs_parser *p)
-
- }
-
-- r = amdgpu_vm_clear_moved(adev, vm, &p->job->sync);
-+ r = amdgpu_vm_handle_moved(adev, vm, &p->job->sync);
-
- if (amdgpu_vm_debug && p->bo_list) {
- /* Invalidate all BOs to test for userspace bugs */
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
-index 64d0123..e73fd988 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
-@@ -189,14 +189,18 @@ int amdgpu_vm_validate_pt_bos(struct amdgpu_device *adev, struct amdgpu_vm *vm,
- spin_unlock(&glob->lru_lock);
- }
-
-- if (vm->use_cpu_for_update) {
-+ if (bo->tbo.type == ttm_bo_type_kernel &&
-+ vm->use_cpu_for_update) {
- r = amdgpu_bo_kmap(bo, NULL);
- if (r)
- return r;
- }
-
- spin_lock(&vm->status_lock);
-- list_move(&bo_base->vm_status, &vm->relocated);
-+ if (bo->tbo.type != ttm_bo_type_kernel)
-+ list_move(&bo_base->vm_status, &vm->moved);
-+ else
-+ list_move(&bo_base->vm_status, &vm->relocated);
- }
- spin_unlock(&vm->status_lock);
-
-@@ -2002,20 +2006,23 @@ int amdgpu_vm_clear_freed(struct amdgpu_device *adev,
- }
-
- /**
-- * amdgpu_vm_clear_moved - clear moved BOs in the PT
-+ * amdgpu_vm_handle_moved - handle moved BOs in the PT
- *
- * @adev: amdgpu_device pointer
- * @vm: requested vm
-+ * @sync: sync object to add fences to
- *
-- * Make sure all moved BOs are cleared in the PT.
-+ * Make sure all BOs which are moved are updated in the PTs.
- * Returns 0 for success.
- *
-- * PTs have to be reserved and mutex must be locked!
-+ * PTs have to be reserved!
- */
--int amdgpu_vm_clear_moved(struct amdgpu_device *adev, struct amdgpu_vm *vm,
-- struct amdgpu_sync *sync)
-+int amdgpu_vm_handle_moved(struct amdgpu_device *adev,
-+ struct amdgpu_vm *vm,
-+ struct amdgpu_sync *sync)
- {
- struct amdgpu_bo_va *bo_va = NULL;
-+ bool clear;
- int r = 0;
-
- spin_lock(&vm->status_lock);
-@@ -2024,7 +2031,10 @@ int amdgpu_vm_clear_moved(struct amdgpu_device *adev, struct amdgpu_vm *vm,
- struct amdgpu_bo_va, base.vm_status);
- spin_unlock(&vm->status_lock);
-
-- r = amdgpu_vm_bo_update(adev, bo_va, true);
-+ /* Per VM BOs never need to bo cleared in the page tables */
-+ clear = bo_va->base.bo->tbo.resv != vm->root.base.bo->tbo.resv;
-+
-+ r = amdgpu_vm_bo_update(adev, bo_va, clear);
- if (r)
- return r;
-
-@@ -2076,6 +2086,37 @@ struct amdgpu_bo_va *amdgpu_vm_bo_add(struct amdgpu_device *adev,
- return bo_va;
- }
-
-+
-+/**
-+ * amdgpu_vm_bo_insert_mapping - insert a new mapping
-+ *
-+ * @adev: amdgpu_device pointer
-+ * @bo_va: bo_va to store the address
-+ * @mapping: the mapping to insert
-+ *
-+ * Insert a new mapping into all structures.
-+ */
-+static void amdgpu_vm_bo_insert_map(struct amdgpu_device *adev,
-+ struct amdgpu_bo_va *bo_va,
-+ struct amdgpu_bo_va_mapping *mapping)
-+{
-+ struct amdgpu_vm *vm = bo_va->base.vm;
-+ struct amdgpu_bo *bo = bo_va->base.bo;
-+
-+ list_add(&mapping->list, &bo_va->invalids);
-+ amdgpu_vm_it_insert(mapping, &vm->va);
-+
-+ if (mapping->flags & AMDGPU_PTE_PRT)
-+ amdgpu_vm_prt_get(adev);
-+
-+ if (bo && bo->tbo.resv == vm->root.base.bo->tbo.resv) {
-+ spin_lock(&vm->status_lock);
-+ list_move(&bo_va->base.vm_status, &vm->moved);
-+ spin_unlock(&vm->status_lock);
-+ }
-+ trace_amdgpu_vm_bo_map(bo_va, mapping);
-+}
-+
- /**
- * amdgpu_vm_bo_map - map bo inside a vm
- *
-@@ -2127,18 +2168,12 @@ int amdgpu_vm_bo_map(struct amdgpu_device *adev,
- if (!mapping)
- return -ENOMEM;
-
-- INIT_LIST_HEAD(&mapping->list);
- mapping->start = saddr;
- mapping->last = eaddr;
- mapping->offset = offset;
- mapping->flags = flags;
-
-- list_add(&mapping->list, &bo_va->invalids);
-- amdgpu_vm_it_insert(mapping, &vm->va);
--
-- if (flags & AMDGPU_PTE_PRT)
-- amdgpu_vm_prt_get(adev);
-- trace_amdgpu_vm_bo_map(bo_va, mapping);
-+ amdgpu_vm_bo_insert_map(adev, bo_va, mapping);
-
- return 0;
- }
-@@ -2165,7 +2200,6 @@ int amdgpu_vm_bo_replace_map(struct amdgpu_device *adev,
- {
- struct amdgpu_bo_va_mapping *mapping;
- struct amdgpu_bo *bo = bo_va->base.bo;
-- struct amdgpu_vm *vm = bo_va->base.vm;
- uint64_t eaddr;
- int r;
-
-@@ -2199,12 +2233,7 @@ int amdgpu_vm_bo_replace_map(struct amdgpu_device *adev,
- mapping->offset = offset;
- mapping->flags = flags;
-
-- list_add(&mapping->list, &bo_va->invalids);
-- amdgpu_vm_it_insert(mapping, &vm->va);
--
-- if (flags & AMDGPU_PTE_PRT)
-- amdgpu_vm_prt_get(adev);
-- trace_amdgpu_vm_bo_map(bo_va, mapping);
-+ amdgpu_vm_bo_insert_map(adev, bo_va, mapping);
-
- return 0;
- }
-@@ -2419,7 +2448,11 @@ void amdgpu_vm_bo_invalidate(struct amdgpu_device *adev,
- bo_base->moved = true;
- if (evicted && bo->tbo.resv == vm->root.base.bo->tbo.resv) {
- spin_lock(&bo_base->vm->status_lock);
-- list_move(&bo_base->vm_status, &vm->evicted);
-+ if (bo->tbo.type == ttm_bo_type_kernel)
-+ list_move(&bo_base->vm_status, &vm->evicted);
-+ else
-+ list_move_tail(&bo_base->vm_status,
-+ &vm->evicted);
- spin_unlock(&bo_base->vm->status_lock);
- continue;
- }
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
-index 427a8c7..03fdf9b 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
-@@ -249,8 +249,9 @@ int amdgpu_vm_update_directories(struct amdgpu_device *adev,
- int amdgpu_vm_clear_freed(struct amdgpu_device *adev,
- struct amdgpu_vm *vm,
- struct dma_fence **fence);
--int amdgpu_vm_clear_moved(struct amdgpu_device *adev, struct amdgpu_vm *vm,
-- struct amdgpu_sync *sync);
-+int amdgpu_vm_handle_moved(struct amdgpu_device *adev,
-+ struct amdgpu_vm *vm,
-+ struct amdgpu_sync *sync);
- int amdgpu_vm_bo_update(struct amdgpu_device *adev,
- struct amdgpu_bo_va *bo_va,
- bool clear);
---
-2.7.4
-