diff options
author | Philipp Hachtmann <phacht@linux.vnet.ibm.com> | 2014-01-23 18:53:24 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-01-23 19:36:52 -0500 |
commit | 354f17e1e2512018a603793cc133e2f296f6ebc6 (patch) | |
tree | b1d8dc4e3702cebecefdb51ac56f7022c2adee0f /mm/memblock.c | |
parent | ec97097bca147d5718a5d2c024d1ec740b10096d (diff) |
mm/nobootmem: free_all_bootmem again
get_allocated_memblock_reserved_regions_info() should work if it is
compiled in. Extended the ifdef around
get_allocated_memblock_memory_regions_info() to include
get_allocated_memblock_reserved_regions_info() as well. Similar changes
in nobootmem.c/free_low_memory_core_early() where the two functions are
called.
[akpm@linux-foundation.org: cleanup]
Signed-off-by: Philipp Hachtmann <phacht@linux.vnet.ibm.com>
Cc: qiuxishi <qiuxishi@huawei.com>
Cc: David Howells <dhowells@redhat.com>
Cc: Daeseok Youn <daeseok.youn@gmail.com>
Cc: Jiang Liu <liuj97@gmail.com>
Acked-by: Yinghai Lu <yinghai@kernel.org>
Cc: Zhang Yanfei <zhangyanfei@cn.fujitsu.com>
Cc: Santosh Shilimkar <santosh.shilimkar@ti.com>
Cc: Grygorii Strashko <grygorii.strashko@ti.com>
Cc: Tang Chen <tangchen@cn.fujitsu.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/memblock.c')
-rw-r--r-- | mm/memblock.c | 17 |
1 files changed, 2 insertions, 15 deletions
diff --git a/mm/memblock.c b/mm/memblock.c index 64ed2439cf75..9c0aeef19440 100644 --- a/mm/memblock.c +++ b/mm/memblock.c | |||
@@ -266,33 +266,20 @@ static void __init_memblock memblock_remove_region(struct memblock_type *type, u | |||
266 | } | 266 | } |
267 | } | 267 | } |
268 | 268 | ||
269 | #ifdef CONFIG_ARCH_DISCARD_MEMBLOCK | ||
270 | |||
269 | phys_addr_t __init_memblock get_allocated_memblock_reserved_regions_info( | 271 | phys_addr_t __init_memblock get_allocated_memblock_reserved_regions_info( |
270 | phys_addr_t *addr) | 272 | phys_addr_t *addr) |
271 | { | 273 | { |
272 | if (memblock.reserved.regions == memblock_reserved_init_regions) | 274 | if (memblock.reserved.regions == memblock_reserved_init_regions) |
273 | return 0; | 275 | return 0; |
274 | 276 | ||
275 | /* | ||
276 | * Don't allow nobootmem allocator to free reserved memory regions | ||
277 | * array if | ||
278 | * - CONFIG_DEBUG_FS is enabled; | ||
279 | * - CONFIG_ARCH_DISCARD_MEMBLOCK is not enabled; | ||
280 | * - reserved memory regions array have been resized during boot. | ||
281 | * Otherwise debug_fs entry "sys/kernel/debug/memblock/reserved" | ||
282 | * will show garbage instead of state of memory reservations. | ||
283 | */ | ||
284 | if (IS_ENABLED(CONFIG_DEBUG_FS) && | ||
285 | !IS_ENABLED(CONFIG_ARCH_DISCARD_MEMBLOCK)) | ||
286 | return 0; | ||
287 | |||
288 | *addr = __pa(memblock.reserved.regions); | 277 | *addr = __pa(memblock.reserved.regions); |
289 | 278 | ||
290 | return PAGE_ALIGN(sizeof(struct memblock_region) * | 279 | return PAGE_ALIGN(sizeof(struct memblock_region) * |
291 | memblock.reserved.max); | 280 | memblock.reserved.max); |
292 | } | 281 | } |
293 | 282 | ||
294 | #ifdef CONFIG_ARCH_DISCARD_MEMBLOCK | ||
295 | |||
296 | phys_addr_t __init_memblock get_allocated_memblock_memory_regions_info( | 283 | phys_addr_t __init_memblock get_allocated_memblock_memory_regions_info( |
297 | phys_addr_t *addr) | 284 | phys_addr_t *addr) |
298 | { | 285 | { |