diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1673-drm-amdkfd-Reuse-code-for-mapping-bo-to-kernel-addre.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1673-drm-amdkfd-Reuse-code-for-mapping-bo-to-kernel-addre.patch | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1673-drm-amdkfd-Reuse-code-for-mapping-bo-to-kernel-addre.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1673-drm-amdkfd-Reuse-code-for-mapping-bo-to-kernel-addre.patch new file mode 100644 index 00000000..db3bda38 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1673-drm-amdkfd-Reuse-code-for-mapping-bo-to-kernel-addre.patch @@ -0,0 +1,157 @@ +From f57e953015406393b1d6cc16d4cff02d9376ffcc Mon Sep 17 00:00:00 2001 +From: Yong Zhao <Yong.Zhao@amd.com> +Date: Thu, 27 Apr 2017 18:20:30 -0400 +Subject: [PATCH 1673/4131] drm/amdkfd: Reuse code for mapping bo to kernel + address + +Change-Id: Ied01fa07ae5e140a791b372311cd23ba7d3e4e78 +Signed-off-by: Yong Zhao <Yong.Zhao@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 101 ++++++++++------------- + 1 file changed, 42 insertions(+), 59 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +index 9cb51dd..bb1f7a6 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +@@ -557,6 +557,40 @@ static int init_user_pages(struct kgd_mem *mem, struct mm_struct *mm, + return ret; + } + ++static int __map_bo_to_kernel(struct amdgpu_bo *bo, u32 domain, void **kptr) ++{ ++ int ret; ++ ++ ret = amdgpu_bo_reserve(bo, true); ++ if (ret) { ++ pr_err("Failed to reserve bo. ret %d\n", ret); ++ return ret; ++ } ++ ++ ret = amdgpu_bo_pin(bo, domain, NULL); ++ if (ret) { ++ pr_err("Failed to pin bo. ret %d\n", ret); ++ goto pin_failed; ++ } ++ ++ ret = amdgpu_bo_kmap(bo, kptr); ++ if (ret) { ++ pr_err("Failed to map bo to kernel. ret %d\n", ret); ++ goto kmap_failed; ++ } ++ ++ amdgpu_bo_unreserve(bo); ++ ++ return ret; ++ ++kmap_failed: ++ amdgpu_bo_unpin(bo); ++pin_failed: ++ amdgpu_bo_unreserve(bo); ++ ++ return ret; ++} ++ + static int __alloc_memory_of_gpu(struct kgd_dev *kgd, uint64_t va, + uint64_t size, void *vm, struct kgd_mem **mem, + uint64_t *offset, void **kptr, +@@ -644,28 +678,9 @@ static int __alloc_memory_of_gpu(struct kgd_dev *kgd, uint64_t va, + bo->flags |= AMDGPU_AMDKFD_USERPTR_BO; + + if (kptr) { +- ret = amdgpu_bo_reserve(bo, true); +- if (ret) { +- pr_err("Failed to reserve bo. ret %d\n", ret); +- goto allocate_mem_reserve_bo_failed; +- } +- +- ret = amdgpu_bo_pin(bo, domain, +- NULL); +- if (ret) { +- pr_err("Failed to pin bo. ret %d\n", ret); +- goto allocate_mem_pin_bo_failed; +- } +- +- ret = amdgpu_bo_kmap(bo, kptr); +- if (ret) { +- pr_err("Failed to map bo to kernel. ret %d\n", +- ret); +- goto allocate_mem_kmap_bo_failed; +- } +- (*mem)->kptr = *kptr; +- +- amdgpu_bo_unreserve(bo); ++ ret = __map_bo_to_kernel(bo, domain, kptr); ++ if (ret) ++ goto map_bo_to_kernel_failed; + } + + (*mem)->va = va; +@@ -689,12 +704,7 @@ static int __alloc_memory_of_gpu(struct kgd_dev *kgd, uint64_t va, + + return 0; + +-allocate_mem_kmap_bo_failed: +- amdgpu_bo_unpin(bo); +-allocate_mem_pin_bo_failed: +- amdgpu_bo_unreserve(bo); +-allocate_mem_reserve_bo_failed: +- ++map_bo_to_kernel_failed: + allocate_init_user_pages_failed: + amdgpu_bo_unref(&bo); + err_bo_create: +@@ -1615,46 +1625,19 @@ int amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(struct kgd_dev *kgd, + struct kgd_mem *mem, void **kptr) + { + int ret; +- struct amdgpu_device *adev; + struct amdgpu_bo *bo; + +- adev = get_amdgpu_device(kgd); +- + mutex_lock(&mem->lock); + + bo = mem->bo; +- /* map the buffer */ +- ret = amdgpu_bo_reserve(bo, true); +- if (ret) { +- pr_err("Failed to reserve bo. ret %d\n", ret); +- mutex_unlock(&mem->lock); +- return ret; +- } + +- ret = amdgpu_bo_pin(bo, AMDGPU_GEM_DOMAIN_GTT, +- NULL); +- if (ret) { +- pr_err("Failed to pin bo. ret %d\n", ret); +- amdgpu_bo_unreserve(bo); +- mutex_unlock(&mem->lock); +- return ret; +- } +- +- ret = amdgpu_bo_kmap(bo, kptr); +- if (ret) { +- pr_err("Failed to map bo to kernel. ret %d\n", ret); +- amdgpu_bo_unpin(bo); +- amdgpu_bo_unreserve(bo); +- mutex_unlock(&mem->lock); +- return ret; +- } +- +- mem->kptr = *kptr; ++ ret = __map_bo_to_kernel(bo, AMDGPU_GEM_DOMAIN_GTT, kptr); ++ if (!ret) ++ mem->kptr = *kptr; + +- amdgpu_bo_unreserve(bo); + mutex_unlock(&mem->lock); + +- return 0; ++ return ret; + } + + static int pin_bo_wo_map(struct kgd_mem *mem) +-- +2.7.4 + |