From: Rebecca Schultz Zavin Date: Wed, 22 Aug 2012 04:35:20 +0000 (-0700) Subject: gpu: ion: Switch to using kmalloc rather than kmap during allocation X-Git-Tag: firefly_0821_release~4090^2~688 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=9993b96e30cebbbfdce64775876ae7338bcfc10d;p=firefly-linux-kernel-4.4.55.git gpu: ion: Switch to using kmalloc rather than kmap during allocation Previously, metadata was stored in the allocated pages themselves during allocation. However the system can only have a limited number of kmapped pages. A very large allocation might exceed this limit. Change-Id: Ibe972096e83924bf5e621d8282c4cd133ca75b0a Signed-off-by: Rebecca Schultz Zavin --- diff --git a/drivers/gpu/ion/ion_system_heap.c b/drivers/gpu/ion/ion_system_heap.c index e7fb07d45a2a..ca6de04f6c29 100644 --- a/drivers/gpu/ion/ion_system_heap.c +++ b/drivers/gpu/ion/ion_system_heap.c @@ -46,7 +46,7 @@ static struct page_info *alloc_largest_available(unsigned long size) if (!page) continue; split_page(page, orders[i]); - info = kmap(page); + info = kmalloc(sizeof(struct page_info *), GFP_KERNEL); info->page = page; info->order = orders[i]; return info; @@ -93,7 +93,7 @@ static int ion_system_heap_allocate(struct ion_heap *heap, } list_del(&info->list); memset(info, 0, sizeof(struct page_info)); - kunmap(page); + kfree(info); } dma_sync_sg_for_device(NULL, table->sgl, table->nents, @@ -107,7 +107,7 @@ err: list_for_each_entry(info, &pages, list) { for (i = 0; i < (1 << info->order); i++) __free_page(info->page + i); - kunmap(info->page); + kfree(info); } return -ENOMEM; }