This seems to collide with my dma direct/swiotlb series posted recently.
+++ b/lib/swiotlb.cWe already have DMA_ATTR_NO_WARN which can be passed in attrs. Please
@@ -490,11 +490,11 @@ static void swiotlb_bounce(phys_addr_t orig_addr, phys_addr_t tlb_addr,
}
}
-phys_addr_t swiotlb_tbl_map_single(struct device *hwdev,
- dma_addr_t tbl_dma_addr,
- phys_addr_t orig_addr, size_t size,
- enum dma_data_direction dir,
- unsigned long attrs)
+static phys_addr_t tbl_map_single(struct device *hwdev,
+ dma_addr_t tbl_dma_addr,
+ phys_addr_t orig_addr, size_t size,
+ enum dma_data_direction dir,
+ unsigned long attrs, bool warn)
use it instead of reinventing it.
swiotlb_alloc_coherent(struct device *hwdev, size_t size,Note: in my above series swiotlb_alloc_coherent is going away, and
dma_addr_t *dma_handle, gfp_t flags)
{
+ bool warn = !(flags & __GFP_NOWARN);
dma_addr_t dev_addr;
void *ret;
int order = get_order(size);
@@ -739,7 +750,7 @@ swiotlb_alloc_coherent(struct device *hwdev, size_t size,
* will grab memory from the lowest available address range.
*/
phys_addr_t paddr = map_single(hwdev, 0, size,
- DMA_FROM_DEVICE, 0);
+ DMA_FROM_DEVICE, 0, warn);
replaced with a swiotlb_alloc that takes a dma_attrs argument.
Using that for passing the nowarn flag is the right way to go instead
of using __GFP_NOWARN.