topology: make for_each_node_with_cpus() O(N)
authorYury Norov [NVIDIA] <yury.norov@gmail.com>
Fri, 9 May 2025 16:20:08 +0000 (12:20 -0400)
committerYury Norov <yury.norov@gmail.com>
Tue, 13 May 2025 15:40:04 +0000 (11:40 -0400)
commit895ee6a22e3195b7c1fee140c842bdeedb89ed33
treeff3267bf545568210ea89b4880652979e50ad08f
parenta256ae22570ee4c3427fdc703a58a89afee6a332
topology: make for_each_node_with_cpus() O(N)

for_each_node_with_cpus() calls nr_cpus_node() at every iteration, which
makes it O(N^2). Kernel tracks such nodes with N_CPU record in node_states
array. Switching to it makes for_each_node_with_cpus() O(N).

Andrea:

Now we can include also offline nodes with CPUs assigned (assuming it's
possible). If checking the online state is required, the user must use
node_online() within the loop.

CC: Andrea Righi <arighi@nvidia.com>
CC:Tejun Heo <tj@kernel.org>
Signed-off-by: Yury Norov [NVIDIA] <yury.norov@gmail.com>
include/linux/nodemask.h
include/linux/topology.h