Commit 8bba154ef29e16331e578029e9050c74b87b7ff9
Committed by
Linus Torvalds
1 parent
172703b08c
Exists in
master
and in
20 other branches
memblock/nobootmem: allow alloc_bootmem() to take 0 as low limit
The bootmem wrapper with memblock supports top-down now, so we do not need to set the 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 memory above 16M on system that has a small amount of RAM. Signed-off-by: Yinghai LU <yinghai@kernel.org> Cc: Ingo Molnar <mingo@elte.hu> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Olaf Hering <olaf@aepfle.de> Cc: Tejun Heo <tj@kernel.org> Cc: Lucas De Marchi <lucas.demarchi@profusion.mobi> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 1 changed file with 16 additions and 9 deletions Side-by-side Diff
include/linux/bootmem.h
... | ... | @@ -99,24 +99,31 @@ |
99 | 99 | unsigned long align, |
100 | 100 | unsigned long goal); |
101 | 101 | |
102 | +#ifdef CONFIG_NO_BOOTMEM | |
103 | +/* We are using top down, so it is safe to use 0 here */ | |
104 | +#define BOOTMEM_LOW_LIMIT 0 | |
105 | +#else | |
106 | +#define BOOTMEM_LOW_LIMIT __pa(MAX_DMA_ADDRESS) | |
107 | +#endif | |
108 | + | |
102 | 109 | #define alloc_bootmem(x) \ |
103 | - __alloc_bootmem(x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) | |
110 | + __alloc_bootmem(x, SMP_CACHE_BYTES, BOOTMEM_LOW_LIMIT) | |
104 | 111 | #define alloc_bootmem_align(x, align) \ |
105 | - __alloc_bootmem(x, align, __pa(MAX_DMA_ADDRESS)) | |
112 | + __alloc_bootmem(x, align, BOOTMEM_LOW_LIMIT) | |
106 | 113 | #define alloc_bootmem_nopanic(x) \ |
107 | - __alloc_bootmem_nopanic(x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) | |
114 | + __alloc_bootmem_nopanic(x, SMP_CACHE_BYTES, BOOTMEM_LOW_LIMIT) | |
108 | 115 | #define alloc_bootmem_pages(x) \ |
109 | - __alloc_bootmem(x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) | |
116 | + __alloc_bootmem(x, PAGE_SIZE, BOOTMEM_LOW_LIMIT) | |
110 | 117 | #define alloc_bootmem_pages_nopanic(x) \ |
111 | - __alloc_bootmem_nopanic(x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) | |
118 | + __alloc_bootmem_nopanic(x, PAGE_SIZE, BOOTMEM_LOW_LIMIT) | |
112 | 119 | #define alloc_bootmem_node(pgdat, x) \ |
113 | - __alloc_bootmem_node(pgdat, x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) | |
120 | + __alloc_bootmem_node(pgdat, x, SMP_CACHE_BYTES, BOOTMEM_LOW_LIMIT) | |
114 | 121 | #define alloc_bootmem_node_nopanic(pgdat, x) \ |
115 | - __alloc_bootmem_node_nopanic(pgdat, x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) | |
122 | + __alloc_bootmem_node_nopanic(pgdat, x, SMP_CACHE_BYTES, BOOTMEM_LOW_LIMIT) | |
116 | 123 | #define alloc_bootmem_pages_node(pgdat, x) \ |
117 | - __alloc_bootmem_node(pgdat, x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) | |
124 | + __alloc_bootmem_node(pgdat, x, PAGE_SIZE, BOOTMEM_LOW_LIMIT) | |
118 | 125 | #define alloc_bootmem_pages_node_nopanic(pgdat, x) \ |
119 | - __alloc_bootmem_node_nopanic(pgdat, x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) | |
126 | + __alloc_bootmem_node_nopanic(pgdat, x, PAGE_SIZE, BOOTMEM_LOW_LIMIT) | |
120 | 127 | |
121 | 128 | #define alloc_bootmem_low(x) \ |
122 | 129 | __alloc_bootmem_low(x, SMP_CACHE_BYTES, 0) |