diff options
-rw-r--r-- | mm/memblock.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/mm/memblock.c b/mm/memblock.c index 6a2a48a122a9..de4d9c352fd6 100644 --- a/mm/memblock.c +++ b/mm/memblock.c | |||
@@ -269,6 +269,19 @@ phys_addr_t __init_memblock get_allocated_memblock_reserved_regions_info( | |||
269 | if (memblock.reserved.regions == memblock_reserved_init_regions) | 269 | if (memblock.reserved.regions == memblock_reserved_init_regions) |
270 | return 0; | 270 | return 0; |
271 | 271 | ||
272 | /* | ||
273 | * Don't allow nobootmem allocator to free reserved memory regions | ||
274 | * array if | ||
275 | * - CONFIG_DEBUG_FS is enabled; | ||
276 | * - CONFIG_ARCH_DISCARD_MEMBLOCK is not enabled; | ||
277 | * - reserved memory regions array have been resized during boot. | ||
278 | * Otherwise debug_fs entry "sys/kernel/debug/memblock/reserved" | ||
279 | * will show garbage instead of state of memory reservations. | ||
280 | */ | ||
281 | if (IS_ENABLED(CONFIG_DEBUG_FS) && | ||
282 | !IS_ENABLED(CONFIG_ARCH_DISCARD_MEMBLOCK)) | ||
283 | return 0; | ||
284 | |||
272 | *addr = __pa(memblock.reserved.regions); | 285 | *addr = __pa(memblock.reserved.regions); |
273 | 286 | ||
274 | return PAGE_ALIGN(sizeof(struct memblock_region) * | 287 | return PAGE_ALIGN(sizeof(struct memblock_region) * |