diff options
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.patch | 208 |
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 - |