]> Pileus Git - ~andy/linux/blobdiff - lib/swiotlb.c
vxlan: fix nonfunctional neigh_reduce()
[~andy/linux] / lib / swiotlb.c
index 615f3de4b5ce2e3248a101f1adc174a03d65b6fb..b604b831f4d182c4cbc43ddcb23e7f98d3d8d177 100644 (file)
@@ -172,7 +172,7 @@ int __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose)
        /*
         * Get the overflow emergency buffer
         */
-       v_overflow_buffer = memblock_virt_alloc_nopanic(
+       v_overflow_buffer = memblock_virt_alloc_low_nopanic(
                                                PAGE_ALIGN(io_tlb_overflow),
                                                PAGE_SIZE);
        if (!v_overflow_buffer)
@@ -220,7 +220,7 @@ swiotlb_init(int verbose)
        bytes = io_tlb_nslabs << IO_TLB_SHIFT;
 
        /* Get IO TLB memory from the low pages */
-       vstart = memblock_virt_alloc_nopanic(PAGE_ALIGN(bytes), PAGE_SIZE);
+       vstart = memblock_virt_alloc_low_nopanic(PAGE_ALIGN(bytes), PAGE_SIZE);
        if (vstart && !swiotlb_init_with_tbl(vstart, io_tlb_nslabs, verbose))
                return;
 
@@ -510,7 +510,8 @@ phys_addr_t swiotlb_tbl_map_single(struct device *hwdev,
 
 not_found:
        spin_unlock_irqrestore(&io_tlb_lock, flags);
-       dev_warn(hwdev, "swiotlb buffer is full\n");
+       if (printk_ratelimit())
+               dev_warn(hwdev, "swiotlb buffer is full (sz: %zd bytes)\n", size);
        return SWIOTLB_MAP_ERROR;
 found:
        spin_unlock_irqrestore(&io_tlb_lock, flags);