diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4697-drm-amdgpu-Use-kvmalloc_array-for-allocating-VRAM-ma.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/4697-drm-amdgpu-Use-kvmalloc_array-for-allocating-VRAM-ma.patch | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4697-drm-amdgpu-Use-kvmalloc_array-for-allocating-VRAM-ma.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4697-drm-amdgpu-Use-kvmalloc_array-for-allocating-VRAM-ma.patch new file mode 100644 index 00000000..ad7c450a --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4697-drm-amdgpu-Use-kvmalloc_array-for-allocating-VRAM-ma.patch @@ -0,0 +1,57 @@ +From d5871abd402e7f170814076860e95e2558b302b2 Mon Sep 17 00:00:00 2001 +From: Chaudhary Amit Kumar <chaudharyamit.kumar@amd.com> +Date: Wed, 9 Jan 2019 20:12:06 +0530 +Subject: [PATCH 4697/5725] drm/amdgpu: Use kvmalloc_array for allocating VRAM + manager nodes array +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +It can be quite big, and there's no need for it to be physically +contiguous. This is less likely to fail under memory pressure (has +actually happened while running piglit). + +Cc: stable@vger.kernel.org +Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> +Reviewed-by: Christian König <christian.koenig@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +Signed-off-by: Chaudhary Amit Kumar <chaudharyamit.kumar@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c +index 11dba00..aff8d2e 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c +@@ -136,7 +136,8 @@ static int amdgpu_vram_mgr_new(struct ttm_mem_type_manager *man, + num_nodes = DIV_ROUND_UP(mem->num_pages, pages_per_node); + } + +- nodes = kcalloc(num_nodes, sizeof(*nodes), GFP_KERNEL); ++ nodes = kvmalloc_array(num_nodes, sizeof(*nodes), ++ GFP_KERNEL | __GFP_ZERO); + if (!nodes) + return -ENOMEM; + +@@ -191,7 +192,7 @@ static int amdgpu_vram_mgr_new(struct ttm_mem_type_manager *man, + drm_mm_remove_node(&nodes[i]); + spin_unlock(&mgr->lock); + +- kfree(nodes); ++ kvfree(nodes); + return r == -ENOSPC ? 0 : r; + } + +@@ -230,7 +231,7 @@ static void amdgpu_vram_mgr_del(struct ttm_mem_type_manager *man, + atomic64_sub(usage, &mgr->usage); + atomic64_sub(vis_usage, &mgr->vis_usage); + +- kfree(mem->mm_node); ++ kvfree(mem->mm_node); + mem->mm_node = NULL; + } + +-- +2.7.4 + |