Devicetree
 help / color / mirror / Atom feed
* [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 3/9] of/numa: remove redundant numa_nodes_parsed node_set() Sang-Heon Jeon
  2026-07-03  9:43 ` [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init Mike Rapoport
  0 siblings, 2 replies; 5+ 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] 5+ 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 ` Sang-Heon Jeon
  2026-07-03  4:27   ` sashiko-bot
  2026-07-03  9:43 ` [PATCH v2 0/9] treewide, numa_memblks: remove redundant work during NUMA init Mike Rapoport
  1 sibling, 1 reply; 5+ 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] 5+ 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: remove redundant numa_nodes_parsed node_set() Sang-Heon Jeon
@ 2026-07-03  4:27   ` sashiko-bot
  2026-07-03  4:51     ` Sang-Heon Jeon
  0 siblings, 1 reply; 5+ 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] 5+ 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; 5+ 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] 5+ 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
  2026-07-03  4:13 ` [PATCH v2 3/9] of/numa: remove redundant numa_nodes_parsed node_set() Sang-Heon Jeon
@ 2026-07-03  9:43 ` Mike Rapoport
  1 sibling, 0 replies; 5+ 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] 5+ messages in thread

end of thread, other threads:[~2026-07-03  9:43 UTC | newest]

Thread overview: 5+ 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 3/9] of/numa: remove redundant numa_nodes_parsed node_set() Sang-Heon Jeon
2026-07-03  4:27   ` sashiko-bot
2026-07-03  4:51     ` 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox