aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/include/linux/topology.h
diff options
context:
space:
mode:
authorValentin Schneider <vschneid@redhat.com>2023-01-20 20:24:34 -0800
committerJakub Kicinski <kuba@kernel.org>2023-02-07 18:20:00 -0800
commit06ac01721f7d07da722abe0ec6f147b90bfc8c77 (patch)
treeecbc16bf5d55d37ae244ef36f194ffaf4b283ef4 /include/linux/topology.h
parentsched/topology: Introduce sched_numa_hop_mask() (diff)
downloadwireguard-linux-06ac01721f7d07da722abe0ec6f147b90bfc8c77.tar.xz
wireguard-linux-06ac01721f7d07da722abe0ec6f147b90bfc8c77.zip
sched/topology: Introduce for_each_numa_hop_mask()
The recently introduced sched_numa_hop_mask() exposes cpumasks of CPUs reachable within a given distance budget, wrap the logic for iterating over all (distance, mask) values inside an iterator macro. Signed-off-by: Valentin Schneider <vschneid@redhat.com> Reviewed-by: Yury Norov <yury.norov@gmail.com> Signed-off-by: Yury Norov <yury.norov@gmail.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'include/linux/topology.h')
-rw-r--r--include/linux/topology.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/include/linux/topology.h b/include/linux/topology.h
index 344c2362755a..fea32377f7c7 100644
--- a/include/linux/topology.h
+++ b/include/linux/topology.h
@@ -261,4 +261,22 @@ sched_numa_hop_mask(unsigned int node, unsigned int hops)
}
#endif /* CONFIG_NUMA */
+/**
+ * for_each_numa_hop_mask - iterate over cpumasks of increasing NUMA distance
+ * from a given node.
+ * @mask: the iteration variable.
+ * @node: the NUMA node to start the search from.
+ *
+ * Requires rcu_lock to be held.
+ *
+ * Yields cpu_online_mask for @node == NUMA_NO_NODE.
+ */
+#define for_each_numa_hop_mask(mask, node) \
+ for (unsigned int __hops = 0; \
+ mask = (node != NUMA_NO_NODE || __hops) ? \
+ sched_numa_hop_mask(node, __hops) : \
+ cpu_online_mask, \
+ !IS_ERR_OR_NULL(mask); \
+ __hops++)
+
#endif /* _LINUX_TOPOLOGY_H */