aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1673-drm-amdkfd-Reuse-code-for-mapping-bo-to-kernel-addre.patch
diff options
context:
space:
mode:
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.patch157
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
+