From 51d1eef262f750a36752520f29ca1b8a6c4923aa Mon Sep 17 00:00:00 2001 From: "Le.Ma" Date: Mon, 11 Sep 2017 12:20:43 +0800 Subject: [PATCH 1780/4131] drm/amdkcl: [KFD][4.12] Use kvmalloc_array(free) instead of drm_calloc(free)_large Change-Id: Ic5a9e414e849830391d8936026770a24e7ab797d Signed-off-by: Le.Ma Reviewed-by: Junwei Zhang --- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index b7a5b44..528ddb9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -573,8 +573,14 @@ static int init_user_pages(struct kgd_mem *mem, struct mm_struct *mm, */ WARN(mem->user_pages, "Leaking user_pages array"); +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0) mem->user_pages = drm_calloc_large(bo->tbo.ttm->num_pages, sizeof(struct page *)); +#else + mem->user_pages = kvmalloc_array(bo->tbo.ttm->num_pages, + sizeof(struct page *), + GFP_KERNEL | __GFP_ZERO); +#endif if (!mem->user_pages) { pr_err("%s: Failed to allocate pages array\n", __func__); ret = -ENOMEM; @@ -608,7 +614,11 @@ static int init_user_pages(struct kgd_mem *mem, struct mm_struct *mm, if (ret) release_pages(mem->user_pages, bo->tbo.ttm->num_pages, 0); free_out: +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0) drm_free_large(mem->user_pages); +#else + kvfree(mem->user_pages); +#endif mem->user_pages = NULL; unregister_out: if (ret) @@ -1194,7 +1204,11 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu( if (mem->user_pages[0]) release_pages(mem->user_pages, mem->bo->tbo.ttm->num_pages, 0); +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0) drm_free_large(mem->user_pages); +#else + kvfree(mem->user_pages); +#endif } ret = reserve_bo_and_cond_vms(mem, NULL, VA_DO_NOT_CARE, &ctx); @@ -1994,9 +2008,16 @@ static int update_invalid_user_pages(struct amdkfd_process_info *process_info, bo = mem->bo; if (!mem->user_pages) { +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0) mem->user_pages = drm_calloc_large(bo->tbo.ttm->num_pages, sizeof(struct page *)); +#else + mem->user_pages = + kvmalloc_array(bo->tbo.ttm->num_pages, + sizeof(struct page *), + GFP_KERNEL | __GFP_ZERO); +#endif if (!mem->user_pages) { ret = -ENOMEM; pr_err("%s: Failed to allocate pages array\n", @@ -2127,7 +2148,11 @@ static int validate_invalid_user_pages(struct amdkfd_process_info *process_info) * the userptr_valid_list. If we need to revalidate * it, we need to start from scratch. */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0) drm_free_large(mem->user_pages); +#else + kvfree(mem->user_pages); +#endif mem->user_pages = NULL; list_move_tail(&mem->validate_list.head, &process_info->userptr_valid_list); -- 2.7.4