not_found:
        spin_unlock_irqrestore(&io_tlb_lock, flags);
-       if (printk_ratelimit())
+       if (!(attrs & DMA_ATTR_NO_WARN) && printk_ratelimit())
                dev_warn(hwdev, "swiotlb buffer is full (sz: %zd bytes)\n", size);
        return SWIOTLB_MAP_ERROR;
 found:
 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);
                 * GFP_DMA memory; fall back on map_single(), which
                 * will grab memory from the lowest available address range.
                 */
-               phys_addr_t paddr = map_single(hwdev, 0, size,
-                                              DMA_FROM_DEVICE, 0);
+               phys_addr_t paddr = map_single(hwdev, 0, size, DMA_FROM_DEVICE,
+                                              warn ? 0 : DMA_ATTR_NO_WARN);
                if (paddr == SWIOTLB_MAP_ERROR)
                        goto err_warn;
 
        return ret;
 
 err_warn:
-       pr_warn("swiotlb: coherent allocation failed for device %s size=%zu\n",
-               dev_name(hwdev), size);
-       dump_stack();
+       if (warn && printk_ratelimit()) {
+               pr_warn("swiotlb: coherent allocation failed for device %s size=%zu\n",
+                       dev_name(hwdev), size);
+               dump_stack();
+       }
 
        return NULL;
 }