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

Commit 765e7b83 authored by Vinayak Menon's avatar Vinayak Menon
Browse files

kernel: dma: disallow altering logical map for non-CMA allocs



DMA_ATTR_STRONGLY_ORDERED and DMA_ATTR_NO_KERNEL_MAPPING alters
the logical mapping of allocated memory. This works only for CMA
allocations where the pages are PAGE_SIZE mapped.
Disallow fallback to buddy alloc if above attrs are set.

Change-Id: I25c632d3c9179e22bc5061fd5f7e9ab6e7847322
Signed-off-by: default avatarVinayak Menon <vinmenon@codeaurora.org>
parent bdf17c96
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -85,7 +85,8 @@ void *dma_direct_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle,
			page = NULL;
		}
	}
	if (!page)
	if (!page && !(attrs & (DMA_ATTR_STRONGLY_ORDERED |
				DMA_ATTR_NO_KERNEL_MAPPING)))
		page = alloc_pages_node(dev_to_node(dev), gfp, page_order);

	if (page && !dma_coherent_ok(dev, page_to_phys(page), size)) {
+2 −1
Original line number Diff line number Diff line
@@ -1026,7 +1026,8 @@ void *swiotlb_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle,
	gfp |= __GFP_NOWARN;

	vaddr = dma_direct_alloc(dev, size, dma_handle, gfp, attrs);
	if (!vaddr)
	if (!vaddr && !(attrs & (DMA_ATTR_STRONGLY_ORDERED |
				DMA_ATTR_NO_KERNEL_MAPPING)))
		vaddr = swiotlb_alloc_buffer(dev, size, dma_handle, attrs);
	return vaddr;
}