Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b4c505ac authored by Liam Mark's avatar Liam Mark Committed by Charan Teja Reddy
Browse files

common: dma-mapping: make dma_common_contiguous_remap more robust



Large allocations can result in the dma_common_contiguous_remap
call not being able to succeed because it can't find enough
contiguous memory to setup the mapping.
Make dma_common_contiguous_remap more robust by using vmalloc
as a fallback.

Change-Id: I12ca710b4c24f4ef24bc33a0d1d4922196fb7492
Signed-off-by: default avatarLiam Mark <lmark@codeaurora.org>
Signed-off-by: default avatarPatrick Daly <pdaly@codeaurora.org>
Signed-off-by: default avatarCharan Teja Reddy <charante@codeaurora.org>
parent 3e1f7fe5
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -298,7 +298,8 @@ void *dma_common_contiguous_remap(struct page *page, size_t size,
	struct page **pages;
	struct vm_struct *area;

	pages = kmalloc(sizeof(struct page *) << get_order(size), GFP_KERNEL);
	pages = kvmalloc(sizeof(struct page *) << get_order(size), GFP_KERNEL);

	if (!pages)
		return NULL;

@@ -307,7 +308,7 @@ void *dma_common_contiguous_remap(struct page *page, size_t size,

	area = __dma_common_pages_remap(pages, size, vm_flags, prot, caller);

	kfree(pages);
	kvfree(pages);

	if (!area)
		return NULL;