[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250815103040.511627-1-yintirui@huawei.com>
Date: Fri, 15 Aug 2025 18:30:40 +0800
From: Yin Tirui <yintirui@...wei.com>
To: <akpm@...ux-foundation.org>, <rppt@...nel.org>, <david@...hat.com>,
<Jonathan.Cameron@...wei.com>, <dan.j.williams@...el.com>,
<linux-mm@...ck.org>, <linux-kernel@...r.kernel.org>
CC: <yintirui@...wei.com>, <chenjun102@...wei.com>,
<wangkefeng.wang@...wei.com>
Subject: [PATCH] mm/numa: fix uninitialized memory nodes causing kernel panic
When the number of CPUs is fewer than the number of memory nodes,
some memory nodes may not be properly initialized because they are
not added to numa_nodes_parsed during memory parsing.
In of_numa_parse_memory_nodes(), after successfully adding a memory
block via numa_add_memblk(), the corresponding node ID should be
marked as parsed. However, the current implementation in numa_add_memblk()
only adds the memory block to numa_meminfo but fails to update
numa_nodes_parsed, leaving some nodes uninitialized.
During boot in a QEMU-emulated ARM64 NUMA environment, the kernel
panics when free_area_init() attempts to access NODE_DATA() for
memory nodes that were uninitialized.
[ 0.000000] Call trace:
[ 0.000000] free_area_init+0x620/0x106c (P)
[ 0.000000] bootmem_init+0x110/0x1dc
[ 0.000000] setup_arch+0x278/0x60c
[ 0.000000] start_kernel+0x70/0x748
[ 0.000000] __primary_switched+0x88/0x90
Cc: stable@...r.kernel.org
Fixes: 87482708210f ("mm: introduce numa_memblks")
Signed-off-by: Yin Tirui <yintirui@...wei.com>
---
mm/numa_memblks.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/mm/numa_memblks.c b/mm/numa_memblks.c
index 541a99c4071a..1dfe434e71b5 100644
--- a/mm/numa_memblks.c
+++ b/mm/numa_memblks.c
@@ -197,7 +197,13 @@ static void __init numa_move_tail_memblk(struct numa_meminfo *dst, int idx,
*/
int __init numa_add_memblk(int nid, u64 start, u64 end)
{
- return numa_add_memblk_to(nid, start, end, &numa_meminfo);
+ int ret;
+
+ ret = numa_add_memblk_to(nid, start, end, &numa_meminfo);
+ if (!ret)
+ node_set(nid, numa_nodes_parsed);
+
+ return ret;
}
/**
--
2.43.0
Powered by blists - more mailing lists