| From e5a5fd4df21b9c4acb67e815ec949cce594860f8 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <michel.daenzer@amd.com> |
| Date: Mon, 20 Oct 2014 18:40:54 +0900 |
| Subject: drm/radeon: Use drm_malloc_ab instead of kmalloc_array |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <michel.daenzer@amd.com> |
| |
| commit e5a5fd4df21b9c4acb67e815ec949cce594860f8 upstream. |
| |
| Should avoid kmalloc failures due to large number of array entries. |
| |
| Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=81991 |
| Reviewed-by: Dave Airlie <airlied@redhat.com> |
| Reviewed-by: Christian König <christian.koenig@amd.com> |
| Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/radeon/radeon_cs.c | 2 +- |
| drivers/gpu/drm/radeon/radeon_ring.c | 4 ++-- |
| drivers/gpu/drm/radeon/radeon_vm.c | 4 ++-- |
| 3 files changed, 5 insertions(+), 5 deletions(-) |
| |
| --- a/drivers/gpu/drm/radeon/radeon_cs.c |
| +++ b/drivers/gpu/drm/radeon/radeon_cs.c |
| @@ -418,7 +418,7 @@ static void radeon_cs_parser_fini(struct |
| kfree(parser->track); |
| kfree(parser->relocs); |
| kfree(parser->relocs_ptr); |
| - kfree(parser->vm_bos); |
| + drm_free_large(parser->vm_bos); |
| for (i = 0; i < parser->nchunks; i++) |
| drm_free_large(parser->chunks[i].kdata); |
| kfree(parser->chunks); |
| --- a/drivers/gpu/drm/radeon/radeon_ring.c |
| +++ b/drivers/gpu/drm/radeon/radeon_ring.c |
| @@ -335,7 +335,7 @@ unsigned radeon_ring_backup(struct radeo |
| } |
| |
| /* and then save the content of the ring */ |
| - *data = kmalloc_array(size, sizeof(uint32_t), GFP_KERNEL); |
| + *data = drm_malloc_ab(size, sizeof(uint32_t)); |
| if (!*data) { |
| mutex_unlock(&rdev->ring_lock); |
| return 0; |
| @@ -377,7 +377,7 @@ int radeon_ring_restore(struct radeon_de |
| } |
| |
| radeon_ring_unlock_commit(rdev, ring, false); |
| - kfree(data); |
| + drm_free_large(data); |
| return 0; |
| } |
| |
| --- a/drivers/gpu/drm/radeon/radeon_vm.c |
| +++ b/drivers/gpu/drm/radeon/radeon_vm.c |
| @@ -132,8 +132,8 @@ struct radeon_cs_reloc *radeon_vm_get_bo |
| struct radeon_cs_reloc *list; |
| unsigned i, idx; |
| |
| - list = kmalloc_array(vm->max_pde_used + 2, |
| - sizeof(struct radeon_cs_reloc), GFP_KERNEL); |
| + list = drm_malloc_ab(vm->max_pde_used + 2, |
| + sizeof(struct radeon_cs_reloc)); |
| if (!list) |
| return NULL; |
| |