Commit 8bba154ef29e16331e578029e9050c74b87b7ff9

Authored by Yinghai Lu
Committed by Linus Torvalds
1 parent 172703b08c

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)