Jan Beulich
2009-Mar-20 07:56 UTC
[Xen-devel] [PATCH] linux: swiotlb allocations do not need to come from low memory
Other than on native, where using the _low variants of alloc_bootmem() is indeed a requirement for swiotlb, on Xen this is not needed. Using the _low variants has the potential of preventing systems from booting when they have lots of memory, due to the way the bootmem allocator works: It allocates memory from bottom to top. Thus, if other large (but not _low) allocations (memmap, large system hash tables) mostly consume the memory below 4Gb, the swiotlb allocations can fail. (This is equally so for native, but cannot be that easily fixed there.) As usual, written and tested on 2.6.27.x and made apply to the 2.6.18 tree without further testing. Signed-off-by: Jan Beulich <jbeulich@novell.com> --- head-2009-03-18.orig/lib/swiotlb-xen.c 2009-03-18 16:08:59.000000000 +0100 +++ head-2009-03-18/lib/swiotlb-xen.c 2009-03-18 16:09:12.000000000 +0100 @@ -173,7 +173,7 @@ __setup("swiotlb=", setup_io_tlb_npages) /* * Get IO TLB memory from the low pages */ - iotlb_virt_start = alloc_bootmem_low_pages(bytes); + iotlb_virt_start = alloc_bootmem_pages(bytes); if (!iotlb_virt_start) panic("Cannot allocate SWIOTLB buffer!\n"); @@ -217,7 +217,7 @@ swiotlb_init_with_default_size(size_t de /* * Get the overflow emergency buffer */ - io_tlb_overflow_buffer = alloc_bootmem_low(io_tlb_overflow); + io_tlb_overflow_buffer = alloc_bootmem(io_tlb_overflow); if (!io_tlb_overflow_buffer) panic("Cannot allocate SWIOTLB overflow buffer!\n"); _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel