aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
diff options
context:
space:
mode:
authorMichel Dänzer <michel.daenzer@amd.com>2018-06-08 06:58:15 -0400
committerAlex Deucher <alexander.deucher@amd.com>2018-06-19 13:43:27 -0400
commit6fa39bc1e01dab8b4f54b23e95a181a2ed5a2d38 (patch)
tree770a3142a0d0147483d8ad0f6b288c1adce8d008 /drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
parent91c822c33066b7c4f8cc47d7532f47e3bb89979b (diff)
drm/amdgpu: Use kvmalloc_array for allocating VRAM manager nodes array
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>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c7
1 files 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 9aca653bec07..9c47e860e5e6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
@@ -135,7 +135,8 @@ static int amdgpu_vram_mgr_new(struct ttm_mem_type_manager *man,
135 num_nodes = DIV_ROUND_UP(mem->num_pages, pages_per_node); 135 num_nodes = DIV_ROUND_UP(mem->num_pages, pages_per_node);
136 } 136 }
137 137
138 nodes = kcalloc(num_nodes, sizeof(*nodes), GFP_KERNEL); 138 nodes = kvmalloc_array(num_nodes, sizeof(*nodes),
139 GFP_KERNEL | __GFP_ZERO);
139 if (!nodes) 140 if (!nodes)
140 return -ENOMEM; 141 return -ENOMEM;
141 142
@@ -190,7 +191,7 @@ error:
190 drm_mm_remove_node(&nodes[i]); 191 drm_mm_remove_node(&nodes[i]);
191 spin_unlock(&mgr->lock); 192 spin_unlock(&mgr->lock);
192 193
193 kfree(nodes); 194 kvfree(nodes);
194 return r == -ENOSPC ? 0 : r; 195 return r == -ENOSPC ? 0 : r;
195} 196}
196 197
@@ -229,7 +230,7 @@ static void amdgpu_vram_mgr_del(struct ttm_mem_type_manager *man,
229 atomic64_sub(usage, &mgr->usage); 230 atomic64_sub(usage, &mgr->usage);
230 atomic64_sub(vis_usage, &mgr->vis_usage); 231 atomic64_sub(vis_usage, &mgr->vis_usage);
231 232
232 kfree(mem->mm_node); 233 kvfree(mem->mm_node);
233 mem->mm_node = NULL; 234 mem->mm_node = NULL;
234} 235}
235 236