memblock/nobootmem: Allow alloc_bootmem take 0 as low limit
PATCH 1/1 memblock/nobootmem: Allow alloc_bootmem take 0 as low limit
bootmem wrapper with memblock support top-down now, So do not need set low limit to __pa(MAX_DMA_ADDRESS).
the logic should be: good to allocate above __pa(MAX_DMA_ADDRESS), but it is ok if we can not find above 16M on system that have small amount of RAM.
Need to apply this one after
[PATCH] mm: Use alloc_bootmem_node_nopanic on really needed path
Signed-off-by Yinghai LU <[email protected]>
--- include/linux/bootmem.h | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-)
include/linux/bootmem.h +16 -9
@@ -99,24 +99,31 @@ extern void *__alloc_bootmem_low_node(pgunsigned long align, unsigned long goal); +#ifdef CONFIG_NO_BOOTMEM +/* We are using top down, so it is safe to use 0 here */ +#define BOOTMEM_LOW_LIMIT 0 +#else +#define BOOTMEM_LOW_LIMIT __pa(MAX_DMA_ADDRESS) +#endif +#define alloc_bootmem (x) \ - __alloc_bootmem(x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) + __alloc_bootmem(x, SMP_CACHE_BYTES, BOOTMEM_LOW_LIMIT)#define alloc_bootmem_align (x, align) \ - __alloc_bootmem(x, align, __pa(MAX_DMA_ADDRESS)) + __alloc_bootmem(x, align, BOOTMEM_LOW_LIMIT)#define alloc_bootmem_nopanic (x) \ - __alloc_bootmem_nopanic(x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) + __alloc_bootmem_nopanic(x, SMP_CACHE_BYTES, BOOTMEM_LOW_LIMIT)#define alloc_bootmem_pages (x) \ - __alloc_bootmem(x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) + __alloc_bootmem(x, PAGE_SIZE, BOOTMEM_LOW_LIMIT)#define alloc_bootmem_pages_nopanic (x) \ - __alloc_bootmem_nopanic(x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) + __alloc_bootmem_nopanic(x, PAGE_SIZE, BOOTMEM_LOW_LIMIT)#define alloc_bootmem_node (pgdat, x) \ - __alloc_bootmem_node(pgdat, x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) + __alloc_bootmem_node(pgdat, x, SMP_CACHE_BYTES, BOOTMEM_LOW_LIMIT)#define alloc_bootmem_node_nopanic (pgdat, x) \ - __alloc_bootmem_node_nopanic(pgdat, x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) + __alloc_bootmem_node_nopanic(pgdat, x, SMP_CACHE_BYTES, BOOTMEM_LOW_LIMIT)#define alloc_bootmem_pages_node (pgdat, x) \ - __alloc_bootmem_node(pgdat, x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) + __alloc_bootmem_node(pgdat, x, PAGE_SIZE, BOOTMEM_LOW_LIMIT)#define alloc_bootmem_pages_node_nopanic (pgdat, x) \ - __alloc_bootmem_node_nopanic(pgdat, x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) + __alloc_bootmem_node_nopanic(pgdat, x, PAGE_SIZE, BOOTMEM_LOW_LIMIT)#define alloc_bootmem_low (x) \ __alloc_bootmem_low(x, SMP_CACHE_BYTES, 0)