Am 04.01.2018 um 10:53 schrieb Christoph Hellwig:
This seems to collide with my dma direct/swiotlb series posted recently.

+++ b/lib/swiotlb.c
@@ -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)
We already have DMA_ATTR_NO_WARN which can be passed in attrs.  Please
use it instead of reinventing it.

  swiotlb_alloc_coherent(struct device *hwdev, size_t size,
                       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);
Note: in my above series swiotlb_alloc_coherent is going away, and
replaced with a swiotlb_alloc that takes a dma_attrs argument.

That's what I thought about as well, but this is a bug fix for stable kernels. So the changes should be as small as possible.

But using DMA_ATTR_NO_WARN is a good point, going to send a v5 which uses this instead.

Regards,
Christian.


Using that for passing the nowarn flag is the right way to go instead
of using __GFP_NOWARN.

Reply via email to