From e5b8df6e6dc46138c3de8c23129a81bd5ec8f553 Mon Sep 17 00:00:00 2001 From: Kevin Wang Date: Thu, 22 Mar 2018 17:58:36 +0800 Subject: [PATCH 3833/4131] drm/amdkcl: fix kfd amdgpu_bo_create func para changed error Change-Id: If26b36e6e51c3b28fd86463ffbde45304dda012f Signed-off-by: Kevin Wang Reviewed-by: Le Ma Signed-off-by: Kalyan Alle --- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 26 +++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index d133922..79be309 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -167,7 +167,8 @@ void amdgpu_amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo) if (bo->flags & AMDGPU_AMDKFD_USERPTR_BO) { kfd_mem_limit.system_mem_used -= bo->tbo.acc_size; kfd_mem_limit.userptr_mem_used -= amdgpu_bo_size(bo); - } else if (bo->preferred_domains == AMDGPU_GEM_DOMAIN_GTT) { + } else if (bo->preferred_domains == AMDGPU_GEM_DOMAIN_GTT && + !bo->tbo.sg) { kfd_mem_limit.system_mem_used -= (bo->tbo.acc_size + amdgpu_bo_size(bo)); } @@ -1209,13 +1210,15 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu( return -EINVAL; user_addr = *offset; } else if (flags & ALLOC_MEM_FLAGS_DOORBELL) { - domain = alloc_domain = AMDGPU_GEM_DOMAIN_GTT; + domain = AMDGPU_GEM_DOMAIN_GTT; + alloc_domain = AMDGPU_GEM_DOMAIN_CPU; alloc_flags = 0; if (size > UINT_MAX) return -EINVAL; sg = create_doorbell_sg(*offset, size); if (!sg) return -ENOMEM; + bo_type = ttm_bo_type_sg; } else { return -EINVAL; } @@ -1256,10 +1259,13 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu( amdgpu_sync_create(&(*mem)->sync); - ret = amdgpu_amdkfd_reserve_system_mem_limit(adev, size, alloc_domain); - if (ret) { - pr_debug("Insufficient system memory\n"); - goto err_reserve_limit; + if (!sg) { + ret = amdgpu_amdkfd_reserve_system_mem_limit(adev, size, + alloc_domain); + if (ret) { + pr_debug("Insufficient system memory\n"); + goto err_reserve_limit; + } } pr_debug("\tcreate BO VA 0x%llx size 0x%llx domain %s\n", @@ -1275,6 +1281,11 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu( domain_string(alloc_domain), ret); goto err_bo_create; } + + if (bo_type == ttm_bo_type_sg) { + bo->tbo.sg = sg; + bo->tbo.ttm->sg = sg; + } bo->kfd_bo = *mem; (*mem)->bo = bo; if (user_addr) @@ -1304,7 +1315,8 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu( allocate_init_user_pages_failed: amdgpu_bo_unref(&bo); err_bo_create: - unreserve_system_mem_limit(adev, size, alloc_domain); + if (!sg) + unreserve_system_mem_limit(adev, size, alloc_domain); err_reserve_limit: kfree(*mem); err: -- 2.7.4