[PATCH] memblock: config the number of init memblock regions

From: Zhou Guanghui
Date: Tue May 10 2022 - 21:10:27 EST


During early boot, the number of memblocks may exceed 128(some memory
areas are not reported to the kernel due to test failures. As a result,
contiguous memory is divided into multiple parts for reporting). If
the size of the init memblock regions is exceeded before the array size
can be resized, the excess memory will be lost.

Signed-off-by: Zhou Guanghui <zhouguanghui1@xxxxxxxxxx>
---
mm/Kconfig | 8 ++++++++
mm/memblock.c | 2 +-
2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/mm/Kconfig b/mm/Kconfig
index 034d87953600..c6881802cccc 100644
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -89,6 +89,14 @@ config SPARSEMEM_VMEMMAP
pfn_to_page and page_to_pfn operations. This is the most
efficient option when sufficient kernel resources are available.

+config MEMBLOCK_INIT_REGIONS
+ int "Number of init memblock regions"
+ range 128 1024
+ default 128
+ help
+ The number of init memblock regions which used to track "memory" and
+ "reserved" memblocks during early boot.
+
config HAVE_MEMBLOCK_PHYS_MAP
bool

diff --git a/mm/memblock.c b/mm/memblock.c
index e4f03a6e8e56..6893d26b750e 100644
--- a/mm/memblock.c
+++ b/mm/memblock.c
@@ -22,7 +22,7 @@

#include "internal.h"

-#define INIT_MEMBLOCK_REGIONS 128
+#define INIT_MEMBLOCK_REGIONS CONFIG_MEMBLOCK_INIT_REGIONS
#define INIT_PHYSMEM_REGIONS 4

#ifndef INIT_MEMBLOCK_RESERVED_REGIONS
--
2.17.1