aboutsummaryrefslogtreecommitdiffstats
path: root/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1524-drm-amdgpu-Remove-pinning-of-kfd-process-PD-PT-BO.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1524-drm-amdgpu-Remove-pinning-of-kfd-process-PD-PT-BO.patch')
-rw-r--r--meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1524-drm-amdgpu-Remove-pinning-of-kfd-process-PD-PT-BO.patch208
1 files changed, 0 insertions, 208 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1524-drm-amdgpu-Remove-pinning-of-kfd-process-PD-PT-BO.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1524-drm-amdgpu-Remove-pinning-of-kfd-process-PD-PT-BO.patch
deleted file mode 100644
index 6a1b58eb..00000000
--- a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1524-drm-amdgpu-Remove-pinning-of-kfd-process-PD-PT-BO.patch
+++ /dev/null
@@ -1,208 +0,0 @@
-From a3cf8b5f29538488b8966654653f8831b185d31a Mon Sep 17 00:00:00 2001
-From: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
-Date: Thu, 21 Jul 2016 18:43:16 -0400
-Subject: [PATCH 1524/4131] drm/amdgpu: Remove pinning of kfd process PD/PT BO
-
-Change-Id: I3ea2109aa34984a47798c29a6a712937c4d4150b
-Signed-off-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
-
- Conflicts:
- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
----
- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 125 ++++++-----------------
- 1 file changed, 29 insertions(+), 96 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
-index 3bf6e64..f9b6990 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
-@@ -236,60 +236,6 @@ static void remove_bo_from_vm(struct amdgpu_device *adev,
- kfree(entry);
- }
-
--
--static int try_pin_bo(struct amdgpu_bo *bo, uint32_t domain)
--{
-- int ret = 0;
--
-- if (!amdgpu_ttm_tt_get_usermm(bo->tbo.ttm)) {
-- ret = amdgpu_bo_pin(bo, domain, NULL);
-- if (ret != 0)
-- goto error;
-- /* Since TTM pipelines evictions and moves, wait for bo
-- * validate to complete.
-- */
-- ttm_bo_wait(&bo->tbo, false, false);
-- } else {
-- /* amdgpu_bo_pin doesn't support userptr. Therefore we
-- * can use the bo->pin_count for our version of
-- * pinning without conflict. */
-- if (bo->pin_count == 0) {
-- amdgpu_ttm_placement_from_domain(bo, domain);
-- ret = ttm_bo_validate(&bo->tbo, &bo->placement,
-- true, false);
-- if (ret != 0) {
-- pr_err("amdgpu: failed to validate BO\n");
-- goto error;
-- }
-- }
-- bo->pin_count++;
-- }
--
--error:
-- return ret;
--}
--
--static int unpin_bo(struct amdgpu_bo *bo)
--{
-- int ret = 0;
--
-- if (!amdgpu_ttm_tt_get_usermm(bo->tbo.ttm)) {
-- ret = amdgpu_bo_unpin(bo);
-- if (ret != 0)
-- goto error;
-- } else if (--bo->pin_count == 0) {
-- amdgpu_ttm_placement_from_domain(bo, AMDGPU_GEM_DOMAIN_CPU);
-- ret = ttm_bo_validate(&bo->tbo, &bo->placement, true, false);
-- if (ret != 0) {
-- pr_err("amdgpu: failed to validate BO\n");
-- goto error;
-- }
-- }
--
--error:
-- return ret;
--}
--
- static int amdgpu_amdkfd_bo_validate(struct amdgpu_bo *bo, uint32_t domain,
- bool wait)
- {
-@@ -337,43 +283,41 @@ static int amdgpu_amdkfd_bo_invalidate(struct amdgpu_bo *bo)
- return ret;
- }
-
--static int try_pin_pts(struct amdgpu_vm *vm)
-+static int validate_pt_pd_bos(struct amdgpu_vm *vm)
- {
- int i, ret = 0;
-- struct amdgpu_bo *bo;
-+ struct amdgpu_bo *bo, *pd = vm->page_directory;
-+ struct amdkfd_vm *kvm = container_of(vm, struct amdkfd_vm, base);
-+
-+ /* Remove eviction fence so that validate can wait on move fences */
-+ amdgpu_bo_fence(pd, NULL, false);
-
-- /* only pin PTs not yet pinned*/
-+ /* PTs share same reservation object as PD. So only fence PD */
- for (i = 0; i <= vm->max_pde_used; ++i) {
- bo = vm->page_tables[i].entry.robj;
-
-- if (!bo || bo->pin_count)
-+ if (!bo)
- continue;
-
-- ret = try_pin_bo(bo, AMDGPU_GEM_DOMAIN_VRAM);
-+ ret = amdgpu_amdkfd_bo_validate(bo, AMDGPU_GEM_DOMAIN_VRAM,
-+ true);
- if (ret != 0) {
-- pr_err("amdgpu: failed to pin PTE %d\n", i);
-+ pr_err("amdgpu: failed to validate PTE %d\n", i);
- break;
- }
- }
-
-- return ret;
--}
--
--static void unpin_pts(struct amdgpu_vm *vm)
--{
-- int i;
-- struct amdgpu_bo *bo;
--
-- for (i = vm->max_pde_used; i >= 0; --i) {
-- bo = vm->page_tables[i].entry.robj;
-+ ret = amdgpu_amdkfd_bo_validate(pd, AMDGPU_GEM_DOMAIN_VRAM,
-+ true);
-+ if (ret != 0) {
-+ pr_err("amdgpu: failed to validate PD\n");
-+ return ret;
-+ }
-
-- if (!bo || !bo->pin_count)
-- continue;
-+ /* Add the eviction fence back */
-+ amdgpu_bo_fence(pd, &kvm->master->eviction_fence->base, true);
-
-- amdgpu_bo_reserve(bo, true);
-- unpin_bo(bo);
-- amdgpu_bo_unreserve(bo);
-- }
-+ return ret;
- }
-
- /**
-@@ -862,10 +806,10 @@ static int map_bo_to_gpuvm(struct amdgpu_device *adev, struct amdgpu_bo *bo,
- int ret;
-
- vm = bo_va->vm;
-- /* Pin PTs */
-- ret = try_pin_pts(vm);
-+ /* Validate PT / PTs */
-+ ret = validate_pt_pd_bos(vm);
- if (ret != 0) {
-- pr_err("amdkfd: Failed to pin PTs\n");
-+ pr_err("amdkfd: Failed to validate PTs\n");
- goto err_unpin_bo;
- }
-
-@@ -1233,7 +1177,6 @@ int amdgpu_amdkfd_gpuvm_create_process_vm(struct kgd_dev *kgd, void **vm,
- {
- int ret;
- struct amdkfd_vm *new_vm;
-- struct amdgpu_bo *pd;
- struct amdgpu_device *adev = get_amdgpu_device(kgd);
-
- BUG_ON(kgd == NULL);
-@@ -1281,14 +1224,6 @@ int amdgpu_amdkfd_gpuvm_create_process_vm(struct kgd_dev *kgd, void **vm,
- if (ret != 0)
- pr_err("amdgpu: Failed to amdgpu_vm_clear_freed\n");
-
-- /* Pin the PD directory */
-- pd = new_vm->base.page_directory;
-- amdgpu_bo_reserve(pd, true);
-- ret = try_pin_bo(pd, AMDGPU_GEM_DOMAIN_VRAM);
-- amdgpu_bo_unreserve(pd);
-- if (ret != 0)
-- pr_err("amdkfd: Failed to pin PD\n");
--
- pr_debug("amdgpu: created process vm with address 0x%llx\n",
- amdgpu_bo_gpu_offset(new_vm->base.page_directory));
-
-@@ -1313,18 +1248,16 @@ void amdgpu_amdkfd_gpuvm_destroy_process_vm(struct kgd_dev *kgd, void *vm)
- BUG_ON(vm == NULL);
-
- pr_debug("Destroying process vm with address %p\n", vm);
-+ /* Release eviction fence from PD */
-+ pd = avm->page_directory;
-+ amdgpu_bo_reserve(pd, false);
-+ amdgpu_bo_fence(pd, NULL, false);
-+ amdgpu_bo_unreserve(pd);
-+
- /* Release eviction fence */
- if (kfd_vm->master == kfd_vm && kfd_vm->eviction_fence != NULL)
- fence_put(&kfd_vm->eviction_fence->base);
-
-- /* Unpin PTs */
-- unpin_pts(avm);
-- /* Unpin PD*/
-- pd = avm->page_directory;
-- amdgpu_bo_reserve(pd, true);
-- unpin_bo(pd);
-- amdgpu_bo_unreserve(pd);
--
- /* Release the VM context */
- amdgpu_vm_fini(adev, avm);
- kfree(vm);
---
-2.7.4
-