diff options
author | Yajun Deng <yajun.deng@linux.dev> | 2024-01-18 14:18:53 +0800 |
---|---|---|
committer | Mike Rapoport (IBM) <rppt@kernel.org> | 2024-01-19 10:53:59 +0200 |
commit | 6a9531c3a88096a26cf3ac582f7ec44f94a7dcb2 (patch) | |
tree | 0f288cf889188b4deac543ce493c2636cdc76b0b /mm | |
parent | 0dd3ee31125508cd67f7e7172247f05b7fd1753a (diff) |
memblock: fix crash when reserved memory is not added to memory
After commit 61167ad5fecd ("mm: pass nid to reserve_bootmem_region()")
nid of a reserved region is used by init_reserved_page() (with
CONFIG_DEFERRED_STRUCT_PAGE_INIT=y) to access node strucure.
In many cases the nid of the reserved memory is not set and this causes
a crash.
When the nid of a reserved region is not set, fall back to
early_pfn_to_nid(), so that nid of the first_online_node will be passed
to init_reserved_page().
Fixes: 61167ad5fecd ("mm: pass nid to reserve_bootmem_region()")
Signed-off-by: Yajun Deng <yajun.deng@linux.dev>
Link: https://lore.kernel.org/r/20240118061853.2652295-1-yajun.deng@linux.dev
[rppt: massaged the commit message]
Signed-off-by: Mike Rapoport (IBM) <rppt@kernel.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/memblock.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/mm/memblock.c b/mm/memblock.c index 5a88d6d24d79..4823ad979b72 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -2141,6 +2141,9 @@ static void __init memmap_init_reserved_pages(void) start = region->base; end = start + region->size; + if (nid == NUMA_NO_NODE || nid >= MAX_NUMNODES) + nid = early_pfn_to_nid(PFN_DOWN(start)); + reserve_bootmem_region(start, end, nid); } } |