aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/memblock.c13
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) *