* [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init
@ 2026-07-03 4:13 Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 1/9] mm: numa_memblks: set numa_nodes_parsed in numa_add_memblk() Sang-Heon Jeon
` (9 more replies)
0 siblings, 10 replies; 15+ messages in thread
From: Sang-Heon Jeon @ 2026-07-03 4:13 UTC (permalink / raw)
To: rppt, akpm, Andy Lutomirski, Borislav Petkov, Danilo Krummrich,
Dave Hansen, Greg Kroah-Hartman, Huacai Chen, Ingo Molnar,
Peter Zijlstra, Rafael J. Wysocki, Rob Herring, Saravana Kannan,
Thomas Gleixner
Cc: linux-mm, Sang-Heon Jeon, devicetree, driver-core, H. Peter Anvin,
Len Brown, linux-acpi, linux-kernel, loongarch, WANG Xuerui, x86
Every existing numa_add_memblk() caller passes a valid node id and
separately marks that node in numa_nodes_parsed with node_set(). In
addition, numa_nodemask_from_meminfo() recomputes the same "nodes that own
memory" set from numa_meminfo, which numa_nodes_parsed already contains.
This redundancy implicitly depends on the callers' node_set(). So, before
removing the redundancy, make numa_add_memblk() set the node in
numa_nodes_parsed explicitly. Then remove the per-caller node_set() and
numa_nodemask_from_meminfo().
Also, since the generic numa_register_meminfo() already sets
node_possible_map to numa_nodes_parsed, remove the duplicate assignment in
arch_numa's numa_register_nodes().
Patch 1 adds the node_set() to numa_add_memblk() itself, so every memblk's
node is set in numa_nodes_parsed on add.
Patches 2-6 depend on patch 1 and remove the redundant per-caller node_set()
from all callers.
Patch 7 removes both numa_nodemask_from_meminfo() call sites and the unused
function itself.
Patch 8 removes the duplicate node_possible_map assignment in arch_numa.
Patch 9 is a minor cleanup, using the existing numa_add_reserved_memblk()
wrapper in numa_cleanup_meminfo().
No functional change.
---
Changes from v1 [1]
- remove warning in numa_add_memblk_to() when start == end
- add Acked-by tag
- rebased onto latest mm-new
[1] https://lore.kernel.org/all/20260628135828.1393120-1-ekffu200098@gmail.com/
---
Sang-Heon Jeon (9):
mm: numa_memblks: set numa_nodes_parsed in numa_add_memblk()
ACPI: NUMA: remove redundant numa_nodes_parsed node_set()
of/numa: remove redundant numa_nodes_parsed node_set()
x86/numa: remove redundant numa_nodes_parsed node_set()
arch_numa: remove redundant numa_nodes_parsed node_set()
LoongArch: remove redundant numa_nodes_parsed node_set()
mm: numa_memblks: remove redundant numa_nodemask_from_meminfo()
arch_numa: remove redundant node_possible_map assignment
mm: numa_memblks: use numa_add_reserved_memblk() in
numa_cleanup_meminfo()
arch/loongarch/kernel/numa.c | 1 -
arch/x86/mm/amdtopology.c | 1 -
arch/x86/mm/numa.c | 1 -
drivers/acpi/numa/srat.c | 2 --
drivers/base/arch_numa.c | 4 ----
drivers/of/of_numa.c | 5 +----
mm/numa_memblks.c | 39 +++++++++++++++++-------------------
7 files changed, 19 insertions(+), 34 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 1/9] mm: numa_memblks: set numa_nodes_parsed in numa_add_memblk()
2026-07-03 4:13 [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init Sang-Heon Jeon
@ 2026-07-03 4:13 ` Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 2/9] ACPI: NUMA: remove redundant numa_nodes_parsed node_set() Sang-Heon Jeon
` (8 subsequent siblings)
9 siblings, 0 replies; 15+ messages in thread
From: Sang-Heon Jeon @ 2026-07-03 4:13 UTC (permalink / raw)
To: rppt, akpm
Cc: linux-mm, Sang-Heon Jeon, Andy Lutomirski, Borislav Petkov,
Danilo Krummrich, Dave Hansen, Greg Kroah-Hartman, Huacai Chen,
Ingo Molnar, linux-kernel, Peter Zijlstra, Rafael J. Wysocki,
Rob Herring, Saravana Kannan, Thomas Gleixner
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 <ekffu200098@gmail.com>
---
mm/numa_memblks.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/mm/numa_memblks.c b/mm/numa_memblks.c
index 3c3c4eac3514..9815192549c3 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",
+ if (start > end) {
+ pr_warn("Warning: invalid memblk node size %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;
}
/**
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 2/9] ACPI: NUMA: remove redundant numa_nodes_parsed node_set()
2026-07-03 4:13 [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 1/9] mm: numa_memblks: set numa_nodes_parsed in numa_add_memblk() Sang-Heon Jeon
@ 2026-07-03 4:13 ` Sang-Heon Jeon
2026-07-06 17:57 ` Rafael J. Wysocki (Intel)
2026-07-03 4:13 ` [PATCH v2 3/9] of/numa: " Sang-Heon Jeon
` (7 subsequent siblings)
9 siblings, 1 reply; 15+ messages in thread
From: Sang-Heon Jeon @ 2026-07-03 4:13 UTC (permalink / raw)
To: rppt, akpm, Rafael J. Wysocki
Cc: linux-mm, Sang-Heon Jeon, Andy Lutomirski, Borislav Petkov,
Danilo Krummrich, Dave Hansen, Greg Kroah-Hartman, Huacai Chen,
Ingo Molnar, Len Brown, linux-acpi, linux-kernel, Peter Zijlstra,
Rob Herring, Saravana Kannan, Thomas Gleixner
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 <ekffu200098@gmail.com>
---
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,
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 3/9] of/numa: remove redundant numa_nodes_parsed node_set()
2026-07-03 4:13 [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 1/9] mm: numa_memblks: set numa_nodes_parsed in numa_add_memblk() Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 2/9] ACPI: NUMA: remove redundant numa_nodes_parsed node_set() Sang-Heon Jeon
@ 2026-07-03 4:13 ` Sang-Heon Jeon
2026-07-03 4:27 ` sashiko-bot
2026-07-03 4:13 ` [PATCH v2 4/9] x86/numa: " Sang-Heon Jeon
` (6 subsequent siblings)
9 siblings, 1 reply; 15+ messages in thread
From: Sang-Heon Jeon @ 2026-07-03 4:13 UTC (permalink / raw)
To: rppt, akpm, Rob Herring, Saravana Kannan
Cc: linux-mm, Sang-Heon Jeon, Andy Lutomirski, Borislav Petkov,
Danilo Krummrich, Dave Hansen, devicetree, Greg Kroah-Hartman,
Huacai Chen, Ingo Molnar, linux-kernel, Peter Zijlstra,
Rafael J. Wysocki, Thomas Gleixner
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 <ekffu200098@gmail.com>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
---
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);
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 4/9] x86/numa: remove redundant numa_nodes_parsed node_set()
2026-07-03 4:13 [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init Sang-Heon Jeon
` (2 preceding siblings ...)
2026-07-03 4:13 ` [PATCH v2 3/9] of/numa: " Sang-Heon Jeon
@ 2026-07-03 4:13 ` Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 5/9] arch_numa: " Sang-Heon Jeon
` (5 subsequent siblings)
9 siblings, 0 replies; 15+ messages in thread
From: Sang-Heon Jeon @ 2026-07-03 4:13 UTC (permalink / raw)
To: rppt, akpm, Dave Hansen, Andy Lutomirski, Peter Zijlstra,
Thomas Gleixner, Ingo Molnar, Borislav Petkov
Cc: linux-mm, Sang-Heon Jeon, Danilo Krummrich, Greg Kroah-Hartman,
H. Peter Anvin, Huacai Chen, linux-kernel, Rafael J. Wysocki,
Rob Herring, Saravana Kannan, x86
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 <ekffu200098@gmail.com>
---
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));
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 5/9] arch_numa: remove redundant numa_nodes_parsed node_set()
2026-07-03 4:13 [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init Sang-Heon Jeon
` (3 preceding siblings ...)
2026-07-03 4:13 ` [PATCH v2 4/9] x86/numa: " Sang-Heon Jeon
@ 2026-07-03 4:13 ` Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 6/9] LoongArch: " Sang-Heon Jeon
` (4 subsequent siblings)
9 siblings, 0 replies; 15+ messages in thread
From: Sang-Heon Jeon @ 2026-07-03 4:13 UTC (permalink / raw)
To: rppt, akpm, Greg Kroah-Hartman, Rafael J. Wysocki,
Danilo Krummrich
Cc: linux-mm, Sang-Heon Jeon, Andy Lutomirski, Borislav Petkov,
Dave Hansen, driver-core, Huacai Chen, Ingo Molnar, linux-kernel,
Peter Zijlstra, Rob Herring, Saravana Kannan, Thomas Gleixner
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 <ekffu200098@gmail.com>
---
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 442ea239bba7..c7f63c4cf367 100644
--- a/drivers/base/arch_numa.c
+++ b/drivers/base/arch_numa.c
@@ -279,7 +279,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;
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 6/9] LoongArch: remove redundant numa_nodes_parsed node_set()
2026-07-03 4:13 [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init Sang-Heon Jeon
` (4 preceding siblings ...)
2026-07-03 4:13 ` [PATCH v2 5/9] arch_numa: " Sang-Heon Jeon
@ 2026-07-03 4:13 ` Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 7/9] mm: numa_memblks: remove redundant numa_nodemask_from_meminfo() Sang-Heon Jeon
` (3 subsequent siblings)
9 siblings, 0 replies; 15+ messages in thread
From: Sang-Heon Jeon @ 2026-07-03 4:13 UTC (permalink / raw)
To: rppt, akpm, Huacai Chen
Cc: linux-mm, Sang-Heon Jeon, Andy Lutomirski, Borislav Petkov,
Danilo Krummrich, Dave Hansen, Greg Kroah-Hartman, Ingo Molnar,
linux-kernel, loongarch, Peter Zijlstra, Rafael J. Wysocki,
Rob Herring, Saravana Kannan, Thomas Gleixner, WANG Xuerui
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 <ekffu200098@gmail.com>
---
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);
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 7/9] mm: numa_memblks: remove redundant numa_nodemask_from_meminfo()
2026-07-03 4:13 [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init Sang-Heon Jeon
` (5 preceding siblings ...)
2026-07-03 4:13 ` [PATCH v2 6/9] LoongArch: " Sang-Heon Jeon
@ 2026-07-03 4:13 ` Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 8/9] arch_numa: remove redundant node_possible_map assignment Sang-Heon Jeon
` (2 subsequent siblings)
9 siblings, 0 replies; 15+ messages in thread
From: Sang-Heon Jeon @ 2026-07-03 4:13 UTC (permalink / raw)
To: rppt, akpm
Cc: linux-mm, Sang-Heon Jeon, Andy Lutomirski, Borislav Petkov,
Danilo Krummrich, Dave Hansen, Greg Kroah-Hartman, Huacai Chen,
Ingo Molnar, linux-kernel, Peter Zijlstra, Rafael J. Wysocki,
Rob Herring, Saravana Kannan, Thomas Gleixner
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 <ekffu200098@gmail.com>
---
mm/numa_memblks.c | 16 ----------------
1 file changed, 16 deletions(-)
diff --git a/mm/numa_memblks.c b/mm/numa_memblks.c
index 9815192549c3..48428060e93f 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;
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 8/9] arch_numa: remove redundant node_possible_map assignment
2026-07-03 4:13 [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init Sang-Heon Jeon
` (6 preceding siblings ...)
2026-07-03 4:13 ` [PATCH v2 7/9] mm: numa_memblks: remove redundant numa_nodemask_from_meminfo() Sang-Heon Jeon
@ 2026-07-03 4:13 ` Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 9/9] mm: numa_memblks: use numa_add_reserved_memblk() in numa_cleanup_meminfo() Sang-Heon Jeon
2026-07-03 9:43 ` [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init Mike Rapoport
9 siblings, 0 replies; 15+ messages in thread
From: Sang-Heon Jeon @ 2026-07-03 4:13 UTC (permalink / raw)
To: rppt, akpm, Greg Kroah-Hartman, Rafael J. Wysocki,
Danilo Krummrich
Cc: linux-mm, Sang-Heon Jeon, Andy Lutomirski, Borislav Petkov,
Dave Hansen, driver-core, Huacai Chen, Ingo Molnar, linux-kernel,
Peter Zijlstra, Rob Herring, Saravana Kannan, Thomas Gleixner
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 <ekffu200098@gmail.com>
---
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 c7f63c4cf367..6476227b772c 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;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 9/9] mm: numa_memblks: use numa_add_reserved_memblk() in numa_cleanup_meminfo()
2026-07-03 4:13 [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init Sang-Heon Jeon
` (7 preceding siblings ...)
2026-07-03 4:13 ` [PATCH v2 8/9] arch_numa: remove redundant node_possible_map assignment Sang-Heon Jeon
@ 2026-07-03 4:13 ` Sang-Heon Jeon
2026-07-03 9:43 ` [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init Mike Rapoport
9 siblings, 0 replies; 15+ messages in thread
From: Sang-Heon Jeon @ 2026-07-03 4:13 UTC (permalink / raw)
To: rppt, akpm
Cc: linux-mm, Sang-Heon Jeon, Andy Lutomirski, Borislav Petkov,
Danilo Krummrich, Dave Hansen, Greg Kroah-Hartman, Huacai Chen,
Ingo Molnar, linux-kernel, Peter Zijlstra, Rafael J. Wysocki,
Rob Herring, Saravana Kannan, Thomas Gleixner
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 <ekffu200098@gmail.com>
---
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 48428060e93f..426d17ff6859 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;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2 3/9] of/numa: remove redundant numa_nodes_parsed node_set()
2026-07-03 4:13 ` [PATCH v2 3/9] of/numa: " Sang-Heon Jeon
@ 2026-07-03 4:27 ` sashiko-bot
2026-07-03 4:51 ` Sang-Heon Jeon
0 siblings, 1 reply; 15+ messages in thread
From: sashiko-bot @ 2026-07-03 4:27 UTC (permalink / raw)
To: Sang-Heon Jeon; +Cc: conor+dt, devicetree, robh
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] The function's final return status is order-dependent, improperly shadowing earlier successes if the last evaluated memory node lacks a 'numa-node-id' property.
--
commit a42c5d6d6a0d76bbe5386c6e6e6307393d31c628
Author: Sang-Heon Jeon <ekffu200098@gmail.com>
of/numa: remove redundant numa_nodes_parsed node_set()
This commit simplifies of_numa_parse_memory_nodes() by removing a redundant
node_set() call. The operation is now handled internally by
numa_add_memblk().
> diff --git a/drivers/of/of_numa.c b/drivers/of/of_numa.c
> index cd2dc8e825c92..230d5f628c1b4 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);
> - }
[Severity: High]
This is a pre-existing issue, but does this function accidentally return an
error if the last memory node evaluated lacks a NUMA node ID?
Looking at of_numa_parse_memory_nodes(), if the device tree contains multiple
memory nodes and the final iterated node does not have a "numa-node-id"
property, the loop handles it like this:
for_each_node_by_type(np, "memory") {
r = of_property_read_u32(np, "numa-node-id", &nid);
if (r == -EINVAL)
continue;
...
This clobbers the r variable with -EINVAL and continues to the end of the
loop. If this is the last iteration, the loop terminates and the function
returns -EINVAL, discarding prior successful parses.
Could this lead to NUMA initialization failing entirely on valid system
configurations and falling back to a single node?
>
> if (!i || r) {
> of_node_put(np);
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260703041329.2797584-1-ekffu200098@gmail.com?part=3
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 3/9] of/numa: remove redundant numa_nodes_parsed node_set()
2026-07-03 4:27 ` sashiko-bot
@ 2026-07-03 4:51 ` Sang-Heon Jeon
0 siblings, 0 replies; 15+ messages in thread
From: Sang-Heon Jeon @ 2026-07-03 4:51 UTC (permalink / raw)
To: sashiko-reviews; +Cc: conor+dt, devicetree, robh
On Fri, Jul 3, 2026 at 1:27 PM <sashiko-bot@kernel.org> wrote:
>
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
>
> Pre-existing issues:
> - [High] The function's final return status is order-dependent, improperly shadowing earlier successes if the last evaluated memory node lacks a 'numa-node-id' property.
> --
>
> commit a42c5d6d6a0d76bbe5386c6e6e6307393d31c628
> Author: Sang-Heon Jeon <ekffu200098@gmail.com>
>
> of/numa: remove redundant numa_nodes_parsed node_set()
>
> This commit simplifies of_numa_parse_memory_nodes() by removing a redundant
> node_set() call. The operation is now handled internally by
> numa_add_memblk().
>
> > diff --git a/drivers/of/of_numa.c b/drivers/of/of_numa.c
> > index cd2dc8e825c92..230d5f628c1b4 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);
> > - }
>
> [Severity: High]
> This is a pre-existing issue, but does this function accidentally return an
> error if the last memory node evaluated lacks a NUMA node ID?
>
> Looking at of_numa_parse_memory_nodes(), if the device tree contains multiple
> memory nodes and the final iterated node does not have a "numa-node-id"
> property, the loop handles it like this:
>
> for_each_node_by_type(np, "memory") {
> r = of_property_read_u32(np, "numa-node-id", &nid);
> if (r == -EINVAL)
> continue;
> ...
>
> This clobbers the r variable with -EINVAL and continues to the end of the
> loop. If this is the last iteration, the loop terminates and the function
> returns -EINVAL, discarding prior successful parses.
>
> Could this lead to NUMA initialization failing entirely on valid system
> configurations and falling back to a single node?
>
> >
> > if (!i || r) {
> > of_node_put(np);
Already being discussed in a separate patch, See [1].
[1] https://lore.kernel.org/all/20260621143919.4176646-1-ekffu200098@gmail.com/
> --
> Sashiko AI review · https://sashiko.dev/#/patchset/20260703041329.2797584-1-ekffu200098@gmail.com?part=3
Best Regards,
Sang-Heon Jeon
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init
2026-07-03 4:13 [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init Sang-Heon Jeon
` (8 preceding siblings ...)
2026-07-03 4:13 ` [PATCH v2 9/9] mm: numa_memblks: use numa_add_reserved_memblk() in numa_cleanup_meminfo() Sang-Heon Jeon
@ 2026-07-03 9:43 ` Mike Rapoport
9 siblings, 0 replies; 15+ messages in thread
From: Mike Rapoport @ 2026-07-03 9:43 UTC (permalink / raw)
To: akpm, Andy Lutomirski, Borislav Petkov, Danilo Krummrich,
Dave Hansen, Greg Kroah-Hartman, Huacai Chen, Ingo Molnar,
Peter Zijlstra, Rafael J. Wysocki, Rob Herring, Saravana Kannan,
Thomas Gleixner, Sang-Heon Jeon
Cc: Mike Rapoport, linux-mm, devicetree, driver-core, H. Peter Anvin,
Len Brown, linux-acpi, linux-kernel, loongarch, WANG Xuerui, x86
On Fri, 3 Jul 2026 13:13:20 +0900, Sang-Heon Jeon wrote:
> Every existing numa_add_memblk() caller passes a valid node id and
> separately marks that node in numa_nodes_parsed with node_set(). In
> addition, numa_nodemask_from_meminfo() recomputes the same "nodes that own
> memory" set from numa_meminfo, which numa_nodes_parsed already contains.
>
> This redundancy implicitly depends on the callers' node_set(). So, before
> removing the redundancy, make numa_add_memblk() set the node in
> numa_nodes_parsed explicitly. Then remove the per-caller node_set() and
> numa_nodemask_from_meminfo().
>
> [...]
Applied to numa_memblks-redundant-work branch of memblock.git tree, thanks!
[1/9] mm: numa_memblks: set numa_nodes_parsed in numa_add_memblk()
commit: abdbd8329281f40afd381346410d6d43604af82c
[2/9] ACPI: NUMA: remove redundant numa_nodes_parsed node_set()
commit: 7cbdade40fb8f440c13ccd7a02d104bf32285187
[3/9] of/numa: remove redundant numa_nodes_parsed node_set()
commit: 3b1e5d902dfa832e4b175cb1f5a000236d45ceb5
[4/9] x86/numa: remove redundant numa_nodes_parsed node_set()
commit: 63fa742bae02f0d2ffe95ff540a51837815abc5c
[5/9] arch_numa: remove redundant numa_nodes_parsed node_set()
commit: 8b9cecbdc78c5a6cfaaf3b00ce7ebe05cf5417e7
[6/9] LoongArch: remove redundant numa_nodes_parsed node_set()
commit: 3aeac07c5b1c3399487f4b38182f8cfbc3dbbd53
[7/9] mm: numa_memblks: remove redundant numa_nodemask_from_meminfo()
commit: a9bafc1832d2db97813069823821ed333b8ecda6
[8/9] arch_numa: remove redundant node_possible_map assignment
commit: f5a77a50a14dffb659ee8f550c824f8280e37fce
[9/9] mm: numa_memblks: use numa_add_reserved_memblk() in numa_cleanup_meminfo()
commit: e55424c84afd48aa2f0f761ae0c006128ef541cf
tree: https://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock
branch: numa_memblks-redundant-work
--
Sincerely yours,
Mike.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/9] ACPI: NUMA: remove redundant numa_nodes_parsed node_set()
2026-07-03 4:13 ` [PATCH v2 2/9] ACPI: NUMA: remove redundant numa_nodes_parsed node_set() Sang-Heon Jeon
@ 2026-07-06 17:57 ` Rafael J. Wysocki (Intel)
2026-07-07 5:42 ` Mike Rapoport
0 siblings, 1 reply; 15+ messages in thread
From: Rafael J. Wysocki (Intel) @ 2026-07-06 17:57 UTC (permalink / raw)
To: Sang-Heon Jeon
Cc: rppt, akpm, Rafael J. Wysocki, linux-mm, Andy Lutomirski,
Borislav Petkov, Danilo Krummrich, Dave Hansen,
Greg Kroah-Hartman, Huacai Chen, Ingo Molnar, Len Brown,
linux-acpi, linux-kernel, Peter Zijlstra, Rob Herring,
Saravana Kannan, Thomas Gleixner
On Fri, Jul 3, 2026 at 6:14 AM Sang-Heon Jeon <ekffu200098@gmail.com> wrote:
>
> 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 <ekffu200098@gmail.com>
> ---
> 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,
> --
Applied as 7.3 material, thanks!
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/9] ACPI: NUMA: remove redundant numa_nodes_parsed node_set()
2026-07-06 17:57 ` Rafael J. Wysocki (Intel)
@ 2026-07-07 5:42 ` Mike Rapoport
0 siblings, 0 replies; 15+ messages in thread
From: Mike Rapoport @ 2026-07-07 5:42 UTC (permalink / raw)
To: Rafael J. Wysocki (Intel)
Cc: Sang-Heon Jeon, akpm, linux-mm, Andy Lutomirski, Borislav Petkov,
Danilo Krummrich, Dave Hansen, Greg Kroah-Hartman, Huacai Chen,
Ingo Molnar, Len Brown, linux-acpi, linux-kernel, Peter Zijlstra,
Rob Herring, Saravana Kannan, Thomas Gleixner
Hi Rafael,
On Mon, Jul 06, 2026 at 07:57:55PM +0200, Rafael J. Wysocki (Intel) wrote:
> On Fri, Jul 3, 2026 at 6:14 AM Sang-Heon Jeon <ekffu200098@gmail.com> wrote:
> >
> > 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 <ekffu200098@gmail.com>
> > ---
> > 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,
> > --
>
> Applied as 7.3 material, thanks!
This depends on patch 1 in the series, so I think it's better to keep the
series together and merge via the memblock tree so I took it there a few
days ago:
https://lore.kernel.org/all/178306815065.2173096.9480193260074524906.b4-ty@b4
Would you like me to add your tag for this patch?
--
Sincerely yours,
Mike.
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2026-07-07 5:43 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-03 4:13 [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 1/9] mm: numa_memblks: set numa_nodes_parsed in numa_add_memblk() Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 2/9] ACPI: NUMA: remove redundant numa_nodes_parsed node_set() Sang-Heon Jeon
2026-07-06 17:57 ` Rafael J. Wysocki (Intel)
2026-07-07 5:42 ` Mike Rapoport
2026-07-03 4:13 ` [PATCH v2 3/9] of/numa: " Sang-Heon Jeon
2026-07-03 4:27 ` sashiko-bot
2026-07-03 4:51 ` Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 4/9] x86/numa: " Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 5/9] arch_numa: " Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 6/9] LoongArch: " Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 7/9] mm: numa_memblks: remove redundant numa_nodemask_from_meminfo() Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 8/9] arch_numa: remove redundant node_possible_map assignment Sang-Heon Jeon
2026-07-03 4:13 ` [PATCH v2 9/9] mm: numa_memblks: use numa_add_reserved_memblk() in numa_cleanup_meminfo() Sang-Heon Jeon
2026-07-03 9:43 ` [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init Mike Rapoport
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.