swiotlb: don't dip into swiotlb pool for coherent allocations
Subsystems (2)
RFC PATCH 1/1 swiotlb: don't dip into swiotlb pool for coherent allocations
All architectures that support swiotlb also have a zone that backs up these less than full addressing allocations (usually ZONE_DMA32).
Because of that it is rather pointless to fall back to the global swiotlb buffer if the normal dma direct allocation failed - the only thing this will do is to eat up bounce buffers that would be more useful to serve streaming mappings.
Signed-off-by Christoph Hellwig <[email protected]>
---
Note: this is against the dma-mapping tree as it requires previous patches there.
arch/arm64/mm/dma-mapping.c | 6 +-- include/linux/swiotlb.h | 5 -- kernel/dma/swiotlb.c | 105 +----------------------------------- 3 files changed, 5 insertions(+), 111 deletions(-)
arch/arm64/mm/dma-mapping.c +3 -3
@@ -112,7 +112,7 @@ static void *__dma_alloc(struct device *dev, size_t size,return addr; } - ptr =swiotlb_alloc (dev, size, dma_handle, flags, attrs); + ptr =dma_direct_alloc_pages (dev, size, dma_handle, flags, attrs);if (!ptr) goto no_mem;
@@ -133,7 +133,7 @@ static void *__dma_alloc(struct device *dev, size_t size,return coherent_ptr; no_map: -swiotlb_free (dev, size, ptr, *dma_handle, attrs); +dma_direct_free_pages (dev, size, ptr, *dma_handle, attrs); no_mem:return NULL ; }
@@ -151,7 +151,7 @@ static void __dma_free(struct device *dev, size_t size,return ;vunmap (vaddr); } -swiotlb_free (dev, size, swiotlb_addr, dma_handle, attrs); +dma_direct_free_pages (dev, size, swiotlb_addr, dma_handle, attrs); } static dma_addr_t __swiotlb_map_page(struct device *dev, struct page *page,
include/linux/swiotlb.h +0 -5
@@ -67,11 +67,6 @@ extern void swiotlb_tbl_sync_single(struct device *hwdev,/* Accessory functions. */ -void *swiotlb_alloc (struct device *hwdev,size_t size,dma_addr_t *dma_handle, -gfp_t flags,unsigned long attrs); -void swiotlb_free (struct device *dev,size_t size,void *vaddr, -dma_addr_t dma_addr,unsigned long attrs); - extern dma_addr_t swiotlb_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir,
kernel/dma/swiotlb.c +2 -103
119 lines not on this page · raw message
Signature · 1 line
2.19.0