From 383018f42d4d3ee0ecb8d3d424db04e7fa6de4a2 Mon Sep 17 00:00:00 2001 From: Jianqun Xu Date: Tue, 7 Dec 2021 14:50:48 +0800 Subject: [PATCH] ANDROID: dma-buf: system_heap: allocate from dma32_pool for dma32* heap The system_dma32 heap should allocate pages with GFP_DMA32, from dma32_pool. Fixes: 8880c05e5a2c ("ANDROID: dma-buf: system_heap: support to allocate pages with GFP_DMA32") Change-Id: I3e9f123b653cd50873cd8dd40d31c46968ad4a43 Signed-off-by: Jianqun Xu --- drivers/dma-buf/heaps/system_heap.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/dma-buf/heaps/system_heap.c b/drivers/dma-buf/heaps/system_heap.c index 5c00b1bf9bc7..797fbb48ec00 100644 --- a/drivers/dma-buf/heaps/system_heap.c +++ b/drivers/dma-buf/heaps/system_heap.c @@ -519,18 +519,22 @@ static const struct dma_buf_ops system_heap_buf_ops = { .release = system_heap_dma_buf_release, }; -static struct page *alloc_largest_available(unsigned long size, - unsigned int max_order) +static struct page *system_heap_alloc_largest_available(struct dma_heap *heap, + unsigned long size, + unsigned int max_order) { struct page *page; int i; + const char *name = dma_heap_get_name(heap); + struct dmabuf_page_pool **pool; + pool = strstr(name, "dma32") ? dma32_pools : pools; for (i = 0; i < NUM_ORDERS; i++) { if (size < (PAGE_SIZE << orders[i])) continue; if (max_order < orders[i]) continue; - page = dmabuf_page_pool_alloc(pools[i]); + page = dmabuf_page_pool_alloc(pool[i]); if (!page) continue; return page; @@ -583,7 +587,7 @@ static struct dma_buf *system_heap_do_allocate(struct dma_heap *heap, if (fatal_signal_pending(current)) goto free_buffer; - page = alloc_largest_available(size_remaining, max_order); + page = system_heap_alloc_largest_available(heap, size_remaining, max_order); if (!page) goto free_buffer;