|
@@ -269,6 +269,19 @@ phys_addr_t __init_memblock get_allocated_memblock_reserved_regions_info(
|
|
|
if (memblock.reserved.regions == memblock_reserved_init_regions)
|
|
|
return 0;
|
|
|
|
|
|
+ /*
|
|
|
+ * Don't allow nobootmem allocator to free reserved memory regions
|
|
|
+ * array if
|
|
|
+ * - CONFIG_DEBUG_FS is enabled;
|
|
|
+ * - CONFIG_ARCH_DISCARD_MEMBLOCK is not enabled;
|
|
|
+ * - reserved memory regions array have been resized during boot.
|
|
|
+ * Otherwise debug_fs entry "sys/kernel/debug/memblock/reserved"
|
|
|
+ * will show garbage instead of state of memory reservations.
|
|
|
+ */
|
|
|
+ if (IS_ENABLED(CONFIG_DEBUG_FS) &&
|
|
|
+ !IS_ENABLED(CONFIG_ARCH_DISCARD_MEMBLOCK))
|
|
|
+ return 0;
|
|
|
+
|
|
|
*addr = __pa(memblock.reserved.regions);
|
|
|
|
|
|
return PAGE_ALIGN(sizeof(struct memblock_region) *
|