From a5d67c54d414ee707333ce179d4492e99122e5b6 Mon Sep 17 00:00:00 2001 From: Zhen Ni Date: Fri, 12 Jun 2026 11:11:05 +0800 Subject: mm/memblock: Remove redundant pageblock_align() in free_unused_memmap() The assignment `prev_end = pageblock_align(end)` is redundant because `prev_end` was already aligned to pageblock oundaries inside the loop. Since pageblock_align() is a pure function, calling it again with the same input produces the same result. This line was added in commit f921f53e089a ("memblock: align freed memory map on pageblock boundaries with SPARSEMEM"). Remove it to simplify the code. Signed-off-by: Zhen Ni Link: https://patch.msgid.link/20260612031105.3350181-1-zhen.ni@easystack.cn Signed-off-by: Mike Rapoport (Microsoft) --- mm/memblock.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mm/memblock.c b/mm/memblock.c index 6349c48154f4..43e036f3e11a 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -2224,10 +2224,8 @@ static void __init free_unused_memmap(void) } #ifdef CONFIG_SPARSEMEM - if (!IS_ALIGNED(prev_end, PAGES_PER_SECTION)) { - prev_end = pageblock_align(end); + if (!IS_ALIGNED(prev_end, PAGES_PER_SECTION)) free_memmap(prev_end, ALIGN(prev_end, PAGES_PER_SECTION)); - } #endif } -- cgit v1.2.3 From f6e6c57f2e100813be6d5882060fef81cb6f32de Mon Sep 17 00:00:00 2001 From: Sang-Heon Jeon Date: Wed, 1 Jul 2026 00:04:06 +0900 Subject: arm64: mm: remove unreachable invalid range check in kasan_init_shadow() kasan_init_shadow() maps each memblock region with for_each_mem_range() and breaks the loop when start >= end. for_each_mem_range() never returns an invalid range, so start < end always. Therefore the start >= end check is unreachable, so remove it. No functional change. Signed-off-by: Sang-Heon Jeon Reviewed-by: Andrey Ryabinin Link: https://patch.msgid.link/20260630150413.1718632-2-ekffu200098@gmail.com Signed-off-by: Mike Rapoport (Microsoft) --- arch/arm64/mm/kasan_init.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/arch/arm64/mm/kasan_init.c b/arch/arm64/mm/kasan_init.c index 3fcad956fdf7..45fbdce684c8 100644 --- a/arch/arm64/mm/kasan_init.c +++ b/arch/arm64/mm/kasan_init.c @@ -353,9 +353,6 @@ static void __init kasan_init_shadow(void) void *start = (void *)__phys_to_virt(pa_start); void *end = (void *)__phys_to_virt(pa_end); - if (start >= end) - break; - kasan_map_populate((unsigned long)kasan_mem_to_shadow(start), (unsigned long)kasan_mem_to_shadow(end), early_pfn_to_nid(virt_to_pfn(start))); -- cgit v1.2.3 From 68d3b7d58237b8794d9343210d4c90b8381cfa96 Mon Sep 17 00:00:00 2001 From: Sang-Heon Jeon Date: Wed, 1 Jul 2026 00:04:07 +0900 Subject: LoongArch: remove unreachable invalid range check in kasan_init() kasan_init() populates the linear mapping shadow with for_each_mem_range() and breaks the loop when start >= end. for_each_mem_range() never returns an invalid range, so start < end always. Therefore the start >= end check is unreachable, so remove it. No functional change. Signed-off-by: Sang-Heon Jeon Reviewed-by: Andrey Ryabinin Link: https://patch.msgid.link/20260630150413.1718632-3-ekffu200098@gmail.com Signed-off-by: Mike Rapoport (Microsoft) --- arch/loongarch/mm/kasan_init.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/arch/loongarch/mm/kasan_init.c b/arch/loongarch/mm/kasan_init.c index 0fc02ca06457..92ca0ba86406 100644 --- a/arch/loongarch/mm/kasan_init.c +++ b/arch/loongarch/mm/kasan_init.c @@ -305,9 +305,6 @@ void __init kasan_init(void) void *start = (void *)phys_to_virt(pa_start); void *end = (void *)phys_to_virt(pa_end); - if (start >= end) - break; - kasan_map_populate((unsigned long)mem_to_shadow(start), (unsigned long)mem_to_shadow(end), NUMA_NO_NODE); } -- cgit v1.2.3 From 99e60ebe108817fd48791f2cb81f1e672ad8285b Mon Sep 17 00:00:00 2001 From: Sang-Heon Jeon Date: Wed, 1 Jul 2026 00:04:08 +0900 Subject: riscv: remove unreachable invalid range check in create_linear_mapping_page_table() create_linear_mapping_page_table() iterates memblock regions with for_each_mem_range() and breaks the loop when start >= end. for_each_mem_range() never returns an invalid range, so start < end always. Therefore the start >= end check is unreachable, so remove it. No functional change. Signed-off-by: Sang-Heon Jeon Reviewed-by: Charlie Jenkins Tested-by: Charlie Jenkins Link: https://patch.msgid.link/20260630150413.1718632-4-ekffu200098@gmail.com Signed-off-by: Mike Rapoport (Microsoft) --- arch/riscv/mm/init.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index 5b1b3c88b4d1..eb93c2ac05a6 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -1229,8 +1229,6 @@ static void __init create_linear_mapping_page_table(void) /* Map all memory banks in the linear mapping */ for_each_mem_range(i, &start, &end) { - if (start >= end) - break; if (start <= __pa(PAGE_OFFSET) && __pa(PAGE_OFFSET) < end) start = __pa(PAGE_OFFSET); -- cgit v1.2.3 From 8008f6995d0c0cf22e7b4d60e95fe14085c10f35 Mon Sep 17 00:00:00 2001 From: Sang-Heon Jeon Date: Wed, 1 Jul 2026 00:04:09 +0900 Subject: riscv: remove unreachable invalid range check in kasan_init() kasan_init() populates the linear mapping shadow with for_each_mem_range() and breaks the loop when start >= end. for_each_mem_range() never returns an invalid range, so start < end always. Therefore the start >= end check is unreachable, so remove it. No functional change. Signed-off-by: Sang-Heon Jeon Reviewed-by: Charlie Jenkins Tested-by: Charlie Jenkins Reviewed-by: Andrey Ryabinin Link: https://patch.msgid.link/20260630150413.1718632-5-ekffu200098@gmail.com Signed-off-by: Mike Rapoport (Microsoft) --- arch/riscv/mm/kasan_init.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/arch/riscv/mm/kasan_init.c b/arch/riscv/mm/kasan_init.c index c4a2a9e5586e..1f3aa9611187 100644 --- a/arch/riscv/mm/kasan_init.c +++ b/arch/riscv/mm/kasan_init.c @@ -512,9 +512,6 @@ void __init kasan_init(void) void *start = (void *)__va(p_start); void *end = (void *)__va(p_end); - if (start >= end) - break; - kasan_populate(kasan_mem_to_shadow(start), kasan_mem_to_shadow(end)); } -- cgit v1.2.3 From 3db1a9ccf9290ea3fe01aadf3bd743ef7032b24a Mon Sep 17 00:00:00 2001 From: Sang-Heon Jeon Date: Wed, 1 Jul 2026 00:04:10 +0900 Subject: ARM: remove unreachable invalid range check in kasan_init() kasan_init() maps each memblock region with for_each_mem_range(), which guarantees pa_start < pa_end. Then it skips any region with pa_start >= arm_lowmem_limit, so pa_start < arm_lowmem_limit is guaranteed as well. When pa_end <= arm_lowmem_limit, pa_start < pa_end means start < end, so the start >= end check is unreachable. When pa_end > arm_lowmem_limit, end is clamped to __va(arm_lowmem_limit), and pa_start < arm_lowmem_limit means start < end, so the check is unreachable as well. No functional change. Signed-off-by: Sang-Heon Jeon Link: https://patch.msgid.link/20260630150413.1718632-6-ekffu200098@gmail.com Signed-off-by: Mike Rapoport (Microsoft) --- arch/arm/mm/kasan_init.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/arch/arm/mm/kasan_init.c b/arch/arm/mm/kasan_init.c index c6625e808bf8..1f7c74c5df9e 100644 --- a/arch/arm/mm/kasan_init.c +++ b/arch/arm/mm/kasan_init.c @@ -262,12 +262,6 @@ void __init kasan_init(void) &pa_start, &pa_end, &arm_lowmem_limit); end = __va(arm_lowmem_limit); } - if (start >= end) { - pr_info("Skipping invalid memory block %pa-%pa (virtual %p-%p)\n", - &pa_start, &pa_end, start, end); - continue; - } - create_mapping(start, end); } -- cgit v1.2.3 From 21e95a4b6f34770571eeeaa6adb535efba1b7281 Mon Sep 17 00:00:00 2001 From: Sang-Heon Jeon Date: Wed, 1 Jul 2026 00:04:11 +0900 Subject: powerpc64/kasan: Remove unreachable invalid range check in kasan_init_phys_region() kasan_init() maps each memblock region with for_each_mem_range() and passes it to kasan_init_phys_region(), which does nothing when start >= end. for_each_mem_range() never returns an invalid range, so start < end always. Therefore the start >= end check is unreachable, so remove it. No functional change. Signed-off-by: Sang-Heon Jeon Link: https://patch.msgid.link/20260630150413.1718632-7-ekffu200098@gmail.com Signed-off-by: Mike Rapoport (Microsoft) --- arch/powerpc/mm/kasan/init_book3e_64.c | 3 --- arch/powerpc/mm/kasan/init_book3s_64.c | 3 --- 2 files changed, 6 deletions(-) diff --git a/arch/powerpc/mm/kasan/init_book3e_64.c b/arch/powerpc/mm/kasan/init_book3e_64.c index 0d3a73d6d4b0..0ed372fb8b09 100644 --- a/arch/powerpc/mm/kasan/init_book3e_64.c +++ b/arch/powerpc/mm/kasan/init_book3e_64.c @@ -68,9 +68,6 @@ static void __init kasan_init_phys_region(void *start, void *end) unsigned long k_start, k_end, k_cur; void *va; - if (start >= end) - return; - k_start = ALIGN_DOWN((unsigned long)kasan_mem_to_shadow(start), PAGE_SIZE); k_end = ALIGN((unsigned long)kasan_mem_to_shadow(end), PAGE_SIZE); diff --git a/arch/powerpc/mm/kasan/init_book3s_64.c b/arch/powerpc/mm/kasan/init_book3s_64.c index dcafa641804c..ccfbfb894637 100644 --- a/arch/powerpc/mm/kasan/init_book3s_64.c +++ b/arch/powerpc/mm/kasan/init_book3s_64.c @@ -24,9 +24,6 @@ static void __init kasan_init_phys_region(void *start, void *end) unsigned long k_start, k_end, k_cur; void *va; - if (start >= end) - return; - k_start = ALIGN_DOWN((unsigned long)kasan_mem_to_shadow(start), PAGE_SIZE); k_end = ALIGN((unsigned long)kasan_mem_to_shadow(end), PAGE_SIZE); -- cgit v1.2.3 From c6af91e48594191f62ad3c1fcc8269b1eb539ef8 Mon Sep 17 00:00:00 2001 From: Sang-Heon Jeon Date: Wed, 1 Jul 2026 00:04:12 +0900 Subject: mm: remove unnecessary empty range check in early_calculate_totalpages() early_calculate_totalpages() iterates the memory ranges with for_each_mem_pfn_range() and calls node_set_state(nid, N_MEMORY) only when end_pfn - start_pfn is non-zero. for_each_mem_pfn_range() never returns an empty range, so start_pfn < end_pfn always. Therefore the check is unnecessary, so remove it. No functional change. Signed-off-by: Sang-Heon Jeon Reviewed-by: Mike Rapoport (Microsoft) Link: https://patch.msgid.link/20260630150413.1718632-8-ekffu200098@gmail.com Signed-off-by: Mike Rapoport (Microsoft) --- mm/mm_init.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mm/mm_init.c b/mm/mm_init.c index 0f64909e8d20..17498a13eb99 100644 --- a/mm/mm_init.c +++ b/mm/mm_init.c @@ -332,8 +332,7 @@ static unsigned long __init early_calculate_totalpages(void) unsigned long pages = end_pfn - start_pfn; totalpages += pages; - if (pages) - node_set_state(nid, N_MEMORY); + node_set_state(nid, N_MEMORY); } return totalpages; } -- cgit v1.2.3 From 2db44dc8bdd3cfc933a3193724f4d38b03e35b80 Mon Sep 17 00:00:00 2001 From: Sang-Heon Jeon Date: Wed, 1 Jul 2026 00:04:13 +0900 Subject: mm/hugetlb: remove unnecessary empty range check in hugetlb_bootmem_set_nodes() hugetlb_bootmem_set_nodes() iterates the memory ranges with for_each_mem_pfn_range() and calls node_set(nid, hugetlb_bootmem_nodes) only when end_pfn > start_pfn. for_each_mem_pfn_range() never returns an empty range, so start_pfn < end_pfn always. Therefore the check is unnecessary, so remove it. start_pfn and end_pfn are no longer used, so remove the local variables. No functional change. Signed-off-by: Sang-Heon Jeon Reviewed-by: David Hildenbrand (Arm) Link: https://patch.msgid.link/20260630150413.1718632-9-ekffu200098@gmail.com Signed-off-by: Mike Rapoport (Microsoft) --- mm/hugetlb.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 571212b80835..4f7020962486 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -4444,15 +4444,12 @@ hugetlb_early_param("default_hugepagesz", default_hugepagesz_setup); void __init hugetlb_bootmem_set_nodes(void) { int i, nid; - unsigned long start_pfn, end_pfn; if (!nodes_empty(hugetlb_bootmem_nodes)) return; - for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, &nid) { - if (end_pfn > start_pfn) - node_set(nid, hugetlb_bootmem_nodes); - } + for_each_mem_pfn_range(i, MAX_NUMNODES, NULL, NULL, &nid) + node_set(nid, hugetlb_bootmem_nodes); } void __init hugetlb_bootmem_alloc(void) -- cgit v1.2.3 From 85b5acfefcf9abd79b9672a54a3b9f48560e7986 Mon Sep 17 00:00:00 2001 From: "Mike Rapoport (Microsoft)" Date: Tue, 30 Jun 2026 10:22:11 +0300 Subject: mm/mm_init: don't overlap NORMAL and MOVABLE zones with kernelcore=mirror When kernelcore or movablecore kernel parameters define size of the NORMAL and MOVABLE zones as percents of the total memory or by absolute value, ZONE_NORMAL is clamped at the beginning of ZONE_MOVABLE. However, when kernelcore=mirror the ZONE_NORMAL span is not changed but rather pages from ZONE_MOVABLE counted as absent in ZONE_NORMAL. Make the behaviour of kernelcore= parameter uniform and treat mirror just as another way to size the zones. Co-developed-by: Wei Yang Signed-off-by: Wei Yang Link: https://patch.msgid.link/20260630072212.624305-2-rppt@kernel.org Signed-off-by: Mike Rapoport (Microsoft) --- mm/mm_init.c | 36 +++--------------------------------- 1 file changed, 3 insertions(+), 33 deletions(-) diff --git a/mm/mm_init.c b/mm/mm_init.c index 0f64909e8d20..57923dd33d06 100644 --- a/mm/mm_init.c +++ b/mm/mm_init.c @@ -1174,9 +1174,8 @@ static void __init adjust_zone_range_for_zone_movable(int nid, arch_zone_highest_possible_pfn[movable_zone]); /* Adjust for ZONE_MOVABLE starting within this range */ - } else if (!mirrored_kernelcore && - *zone_start_pfn < zone_movable_pfn[nid] && - *zone_end_pfn > zone_movable_pfn[nid]) { + } else if (*zone_start_pfn < zone_movable_pfn[nid] && + *zone_end_pfn > zone_movable_pfn[nid]) { *zone_end_pfn = zone_movable_pfn[nid]; /* Check if this whole range is within ZONE_MOVABLE */ @@ -1224,40 +1223,11 @@ static unsigned long __init zone_absent_pages_in_node(int nid, unsigned long zone_start_pfn, unsigned long zone_end_pfn) { - unsigned long nr_absent; - /* zone is empty, we don't have any absent pages */ if (zone_start_pfn == zone_end_pfn) return 0; - nr_absent = __absent_pages_in_range(nid, zone_start_pfn, zone_end_pfn); - - /* - * ZONE_MOVABLE handling. - * Treat pages to be ZONE_MOVABLE in ZONE_NORMAL as absent pages - * and vice versa. - */ - if (mirrored_kernelcore && zone_movable_pfn[nid]) { - unsigned long start_pfn, end_pfn; - struct memblock_region *r; - - for_each_mem_region(r) { - start_pfn = clamp(memblock_region_memory_base_pfn(r), - zone_start_pfn, zone_end_pfn); - end_pfn = clamp(memblock_region_memory_end_pfn(r), - zone_start_pfn, zone_end_pfn); - - if (zone_type == ZONE_MOVABLE && - memblock_is_mirror(r)) - nr_absent += end_pfn - start_pfn; - - if (zone_type == ZONE_NORMAL && - !memblock_is_mirror(r)) - nr_absent += end_pfn - start_pfn; - } - } - - return nr_absent; + return __absent_pages_in_range(nid, zone_start_pfn, zone_end_pfn); } /* -- cgit v1.2.3 From 3be62316839ac82f934988a2bcdcaed5c1b56d39 Mon Sep 17 00:00:00 2001 From: "Mike Rapoport (Microsoft)" Date: Tue, 30 Jun 2026 10:22:12 +0300 Subject: mm/mm_init: drop overlap_memmap_init() When ZONE_NORMAL and ZONE_MOVABLE could overlap because kernelcore=mirror didn't reduce the span of ZONE_NORMAL, initialization of the memory map had to skip overlapping pages during initialization of ZONE_MOVABLE to avoid double initialization of the same struct pages. Since kernelcore=mirror works now the same way as other variants of kernelcore=/movablecore=, and adjusts the span of ZONE_NORMAL, there can't be an overlap between ZONE_NORMAL and ZONE_MOVABLE. Remove overlap_memmap_init(). Co-developed-by: Wei Yang Signed-off-by: Wei Yang Reviewed-by: David Hildenbrand (Arm) Link: https://patch.msgid.link/20260630072212.624305-3-rppt@kernel.org Signed-off-by: Mike Rapoport (Microsoft) --- mm/mm_init.c | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/mm/mm_init.c b/mm/mm_init.c index 57923dd33d06..838b5a0ad98d 100644 --- a/mm/mm_init.c +++ b/mm/mm_init.c @@ -799,28 +799,6 @@ void __meminit init_deferred_page(unsigned long pfn, int nid) __init_deferred_page(pfn, nid); } -/* If zone is ZONE_MOVABLE but memory is mirrored, it is an overlapped init */ -static bool __meminit -overlap_memmap_init(unsigned long zone, unsigned long *pfn) -{ - static struct memblock_region *r __meminitdata; - - if (mirrored_kernelcore && zone == ZONE_MOVABLE) { - if (!r || *pfn >= memblock_region_memory_end_pfn(r)) { - for_each_mem_region(r) { - if (*pfn < memblock_region_memory_end_pfn(r)) - break; - } - } - if (*pfn >= memblock_region_memory_base_pfn(r) && - memblock_is_mirror(r)) { - *pfn = memblock_region_memory_end_pfn(r); - return true; - } - } - return false; -} - /* * Only struct pages that correspond to ranges defined by memblock.memory * are zeroed and initialized by going through __init_single_page() during @@ -907,8 +885,6 @@ void __meminit memmap_init_range(unsigned long size, int nid, unsigned long zone * function. They do not exist on hotplugged memory. */ if (context == MEMINIT_EARLY) { - if (overlap_memmap_init(zone, &pfn)) - continue; if (defer_init(nid, pfn, zone_end_pfn)) { deferred_struct_pages = true; break; -- cgit v1.2.3 From abdbd8329281f40afd381346410d6d43604af82c Mon Sep 17 00:00:00 2001 From: Sang-Heon Jeon Date: Fri, 3 Jul 2026 13:13:21 +0900 Subject: mm: numa_memblks: set numa_nodes_parsed in numa_add_memblk() Every existing numa_add_memblk() caller separately marks the new node in numa_nodes_parsed with node_set(). Set the node in numa_add_memblk() itself on a successful add, so this no longer depends on each caller. numa_add_memblk_to() now returns -EINVAL for an out-of-range node id, so a zero return implies @nid was valid. No caller passes an invalid one, so existing callers are unaffected. The per-caller node_set() calls are removed in later patches. No functional change. Signed-off-by: Sang-Heon Jeon Link: https://patch.msgid.link/20260703041329.2797584-2-ekffu200098@gmail.com Signed-off-by: Mike Rapoport (Microsoft) --- mm/numa_memblks.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/mm/numa_memblks.c b/mm/numa_memblks.c index 3c3c4eac3514..844c71d6d4c0 100644 --- a/mm/numa_memblks.c +++ b/mm/numa_memblks.c @@ -135,13 +135,20 @@ EXPORT_SYMBOL(__node_distance); static int __init numa_add_memblk_to(int nid, u64 start, u64 end, struct numa_meminfo *mi) { + /* whine about and ignore invalid nid */ + if (nid < 0 || nid >= MAX_NUMNODES) { + pr_warn("Warning: invalid memblk node id %d [mem %#010Lx-%#010Lx]\n", + nid, start, end - 1); + return -EINVAL; + } + /* ignore zero length blks */ if (start == end) return 0; - /* whine about and ignore invalid blks */ - if (start > end || nid < 0 || nid >= MAX_NUMNODES) { - pr_warn("Warning: invalid memblk node %d [mem %#010Lx-%#010Lx]\n", + /* whine about and ignore invalid ranges */ + if (start > end) { + pr_warn("Warning: invalid memblk range for node %d [mem %#010Lx-%#010Lx]\n", nid, start, end - 1); return 0; } @@ -193,13 +200,20 @@ static void __init numa_move_tail_memblk(struct numa_meminfo *dst, int idx, * @end: End address of the new memblk * * Add a new memblk to the default numa_meminfo. + * On success @nid is also set in numa_nodes_parsed. * * RETURNS: * 0 on success, -errno on failure. */ 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; } /** -- cgit v1.2.3 From 7cbdade40fb8f440c13ccd7a02d104bf32285187 Mon Sep 17 00:00:00 2001 From: Sang-Heon Jeon Date: Fri, 3 Jul 2026 13:13:22 +0900 Subject: ACPI: NUMA: remove redundant numa_nodes_parsed node_set() numa_add_memblk() now sets the node in numa_nodes_parsed itself, so the caller's own node_set() is redundant. Remove it. No functional change. Signed-off-by: Sang-Heon Jeon Link: https://patch.msgid.link/20260703041329.2797584-3-ekffu200098@gmail.com Signed-off-by: Mike Rapoport (Microsoft) --- drivers/acpi/numa/srat.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/acpi/numa/srat.c b/drivers/acpi/numa/srat.c index 62d4a8df0b8c..5c407dc6401e 100644 --- a/drivers/acpi/numa/srat.c +++ b/drivers/acpi/numa/srat.c @@ -399,8 +399,6 @@ acpi_parse_memory_affinity(union acpi_subtable_headers *header, goto out_err_bad_srat; } - node_set(node, numa_nodes_parsed); - pr_info("SRAT: Node %u PXM %u [mem %#010Lx-%#010Lx]%s%s\n", node, pxm, (unsigned long long) start, (unsigned long long) end - 1, -- cgit v1.2.3 From 3b1e5d902dfa832e4b175cb1f5a000236d45ceb5 Mon Sep 17 00:00:00 2001 From: Sang-Heon Jeon Date: Fri, 3 Jul 2026 13:13:23 +0900 Subject: of/numa: remove redundant numa_nodes_parsed node_set() numa_add_memblk() now sets the node in numa_nodes_parsed itself, so the caller's own node_set() is redundant. Remove it. No functional change. Signed-off-by: Sang-Heon Jeon Acked-by: Rob Herring (Arm) Link: https://patch.msgid.link/20260703041329.2797584-4-ekffu200098@gmail.com Signed-off-by: Mike Rapoport (Microsoft) --- drivers/of/of_numa.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/drivers/of/of_numa.c b/drivers/of/of_numa.c index cd2dc8e825c9..230d5f628c1b 100644 --- a/drivers/of/of_numa.c +++ b/drivers/of/of_numa.c @@ -59,11 +59,8 @@ static int __init of_numa_parse_memory_nodes(void) r = -EINVAL; } - for (i = 0; !r && !of_address_to_resource(np, i, &rsrc); i++) { + for (i = 0; !r && !of_address_to_resource(np, i, &rsrc); i++) r = numa_add_memblk(nid, rsrc.start, rsrc.end + 1); - if (!r) - node_set(nid, numa_nodes_parsed); - } if (!i || r) { of_node_put(np); -- cgit v1.2.3 From 63fa742bae02f0d2ffe95ff540a51837815abc5c Mon Sep 17 00:00:00 2001 From: Sang-Heon Jeon Date: Fri, 3 Jul 2026 13:13:24 +0900 Subject: x86/numa: remove redundant numa_nodes_parsed node_set() numa_add_memblk() now sets the node in numa_nodes_parsed itself, so the caller's own node_set() is redundant. Remove it. No functional change. Signed-off-by: Sang-Heon Jeon Link: https://patch.msgid.link/20260703041329.2797584-5-ekffu200098@gmail.com Signed-off-by: Mike Rapoport (Microsoft) --- arch/x86/mm/amdtopology.c | 1 - arch/x86/mm/numa.c | 1 - 2 files changed, 2 deletions(-) diff --git a/arch/x86/mm/amdtopology.c b/arch/x86/mm/amdtopology.c index f980b0eb0105..1cb581bbf2b6 100644 --- a/arch/x86/mm/amdtopology.c +++ b/arch/x86/mm/amdtopology.c @@ -150,7 +150,6 @@ int __init amd_numa_init(void) prevbase = base; numa_add_memblk(nodeid, base, limit); - node_set(nodeid, numa_nodes_parsed); } if (nodes_empty(numa_nodes_parsed)) diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c index 99d0a9332c14..ced66e68a68e 100644 --- a/arch/x86/mm/numa.c +++ b/arch/x86/mm/numa.c @@ -216,7 +216,6 @@ static int __init dummy_numa_init(void) printk(KERN_INFO "Faking a node at [mem %#018Lx-%#018Lx]\n", 0LLU, PFN_PHYS(max_pfn) - 1); - node_set(0, numa_nodes_parsed); node_set(0, numa_phys_nodes_parsed); numa_add_memblk(0, 0, PFN_PHYS(max_pfn)); -- cgit v1.2.3 From 8b9cecbdc78c5a6cfaaf3b00ce7ebe05cf5417e7 Mon Sep 17 00:00:00 2001 From: Sang-Heon Jeon Date: Fri, 3 Jul 2026 13:13:25 +0900 Subject: arch_numa: remove redundant numa_nodes_parsed node_set() numa_add_memblk() now sets the node in numa_nodes_parsed itself, so the caller's own node_set() is redundant. Remove it. No functional change. Signed-off-by: Sang-Heon Jeon Link: https://patch.msgid.link/20260703041329.2797584-6-ekffu200098@gmail.com Signed-off-by: Mike Rapoport (Microsoft) --- drivers/base/arch_numa.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/base/arch_numa.c b/drivers/base/arch_numa.c index c99f2ab105e5..19bc806313c4 100644 --- a/drivers/base/arch_numa.c +++ b/drivers/base/arch_numa.c @@ -283,7 +283,6 @@ static int __init dummy_numa_init(void) pr_err("NUMA init failed\n"); return ret; } - node_set(0, numa_nodes_parsed); numa_off = true; return 0; -- cgit v1.2.3 From 3aeac07c5b1c3399487f4b38182f8cfbc3dbbd53 Mon Sep 17 00:00:00 2001 From: Sang-Heon Jeon Date: Fri, 3 Jul 2026 13:13:26 +0900 Subject: LoongArch: remove redundant numa_nodes_parsed node_set() numa_add_memblk() now sets the node in numa_nodes_parsed itself, so the caller's own node_set() is redundant. Remove it. No functional change. Signed-off-by: Sang-Heon Jeon Link: https://patch.msgid.link/20260703041329.2797584-7-ekffu200098@gmail.com Signed-off-by: Mike Rapoport (Microsoft) --- arch/loongarch/kernel/numa.c | 1 - 1 file changed, 1 deletion(-) diff --git a/arch/loongarch/kernel/numa.c b/arch/loongarch/kernel/numa.c index 8b89898e20df..c96c53623715 100644 --- a/arch/loongarch/kernel/numa.c +++ b/arch/loongarch/kernel/numa.c @@ -216,7 +216,6 @@ static int __init fake_numa_init(void) phys_addr_t start = memblock_start_of_DRAM(); phys_addr_t end = memblock_end_of_DRAM() - 1; - node_set(0, numa_nodes_parsed); pr_info("Faking a node at [mem %pap-%pap]\n", &start, &end); return numa_add_memblk(0, start, end + 1); -- cgit v1.2.3 From a9bafc1832d2db97813069823821ed333b8ecda6 Mon Sep 17 00:00:00 2001 From: Sang-Heon Jeon Date: Fri, 3 Jul 2026 13:13:27 +0900 Subject: mm: numa_memblks: remove redundant numa_nodemask_from_meminfo() numa_add_memblk() now sets each added node in numa_nodes_parsed, so numa_nodes_parsed already contains every node that owns memory. The nodes numa_nodemask_from_meminfo() adds from numa_meminfo are already set, so the calls in numa_alloc_distance() and numa_register_meminfo() are redundant. So remove both call sites and the unused function itself. No functional change. Signed-off-by: Sang-Heon Jeon Link: https://patch.msgid.link/20260703041329.2797584-8-ekffu200098@gmail.com Signed-off-by: Mike Rapoport (Microsoft) --- mm/numa_memblks.c | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/mm/numa_memblks.c b/mm/numa_memblks.c index 844c71d6d4c0..67dc9f4edd7b 100644 --- a/mm/numa_memblks.c +++ b/mm/numa_memblks.c @@ -17,20 +17,6 @@ nodemask_t numa_nodes_parsed __initdata; static struct numa_meminfo numa_meminfo __initdata_or_meminfo; static struct numa_meminfo numa_reserved_meminfo __initdata_or_meminfo; -/* - * Set nodes, which have memory in @mi, in *@nodemask. - */ -static void __init numa_nodemask_from_meminfo(nodemask_t *nodemask, - const struct numa_meminfo *mi) -{ - int i; - - for (i = 0; i < ARRAY_SIZE(mi->blk); i++) - if (mi->blk[i].start != mi->blk[i].end && - mi->blk[i].nid != NUMA_NO_NODE) - node_set(mi->blk[i].nid, *nodemask); -} - /** * numa_reset_distance - Reset NUMA distance table * @@ -56,7 +42,6 @@ static int __init numa_alloc_distance(void) /* size the new table and allocate it */ nodes_parsed = numa_nodes_parsed; - numa_nodemask_from_meminfo(&nodes_parsed, &numa_meminfo); for_each_node_mask(i, nodes_parsed) cnt = i; @@ -415,7 +400,6 @@ static int __init numa_register_meminfo(struct numa_meminfo *mi) /* Account for nodes with cpus and no memory */ node_possible_map = numa_nodes_parsed; - numa_nodemask_from_meminfo(&node_possible_map, mi); if (WARN_ON(nodes_empty(node_possible_map))) return -EINVAL; -- cgit v1.2.3 From f5a77a50a14dffb659ee8f550c824f8280e37fce Mon Sep 17 00:00:00 2001 From: Sang-Heon Jeon Date: Fri, 3 Jul 2026 13:13:28 +0900 Subject: arch_numa: remove redundant node_possible_map assignment numa_register_meminfo() sets node_possible_map to numa_nodes_parsed. The later assignment in numa_register_nodes() is therefore redundant, so remove it. No functional change. Signed-off-by: Sang-Heon Jeon Link: https://patch.msgid.link/20260703041329.2797584-9-ekffu200098@gmail.com Signed-off-by: Mike Rapoport (Microsoft) --- drivers/base/arch_numa.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/base/arch_numa.c b/drivers/base/arch_numa.c index 19bc806313c4..d4e426aa51c5 100644 --- a/drivers/base/arch_numa.c +++ b/drivers/base/arch_numa.c @@ -221,9 +221,6 @@ static int __init numa_register_nodes(void) node_set_online(nid); } - /* Setup online nodes to actual nodes*/ - node_possible_map = numa_nodes_parsed; - return 0; } -- cgit v1.2.3 From e55424c84afd48aa2f0f761ae0c006128ef541cf Mon Sep 17 00:00:00 2001 From: Sang-Heon Jeon Date: Fri, 3 Jul 2026 13:13:29 +0900 Subject: mm: numa_memblks: use numa_add_reserved_memblk() in numa_cleanup_meminfo() numa_cleanup_meminfo() calls the internal numa_add_memblk_to() to add a block to numa_reserved_meminfo, even though numa_add_reserved_memblk() wraps exactly that. Use the wrapper instead, so numa_add_memblk_to() is reached only through its two wrappers. No functional change. Signed-off-by: Sang-Heon Jeon Link: https://patch.msgid.link/20260703041329.2797584-10-ekffu200098@gmail.com Signed-off-by: Mike Rapoport (Microsoft) --- mm/numa_memblks.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mm/numa_memblks.c b/mm/numa_memblks.c index 67dc9f4edd7b..be6e7346f6c7 100644 --- a/mm/numa_memblks.c +++ b/mm/numa_memblks.c @@ -255,8 +255,7 @@ int __init numa_cleanup_meminfo(struct numa_meminfo *mi) /* preserve info for non-RAM areas above 'max_pfn': */ if (bi->end > high) { - numa_add_memblk_to(bi->nid, high, bi->end, - &numa_reserved_meminfo); + numa_add_reserved_memblk(bi->nid, high, bi->end); bi->end = high; } -- cgit v1.2.3