kernel/sched/ext.c | 11 +++++++++++ tools/sched_ext/include/scx/common.bpf.h | 1 + tools/sched_ext/include/scx/compat.bpf.h | 4 ++++ 3 files changed, 16 insertions(+)
Similarly to scx_bpf_cpu_ids(), introduce a new kfunc scx_bpf_nr_node_ids()
to expose the maximum number of NUMA nodes in the system.
BFP schedulers can use this information together with the new node-aware
kfuncs, for example to create per-node DSQs, validate node IDs, etc.
Signed-off-by: Andrea Righi <arighi@nvidia.com>
---
kernel/sched/ext.c | 11 +++++++++++
tools/sched_ext/include/scx/common.bpf.h | 1 +
tools/sched_ext/include/scx/compat.bpf.h | 4 ++++
3 files changed, 16 insertions(+)
diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c
index 95603db36f043..74b247c36b3df 100644
--- a/kernel/sched/ext.c
+++ b/kernel/sched/ext.c
@@ -7113,6 +7113,16 @@ __bpf_kfunc void scx_bpf_cpuperf_set(s32 cpu, u32 perf)
}
}
+/**
+ * scx_bpf_nr_node_ids - Return the number of possible node IDs
+ *
+ * All valid node IDs in the system are smaller than the returned value.
+ */
+__bpf_kfunc u32 scx_bpf_nr_node_ids(void)
+{
+ return nr_node_ids;
+}
+
/**
* scx_bpf_nr_cpu_ids - Return the number of possible CPU IDs
*
@@ -7325,6 +7335,7 @@ BTF_ID_FLAGS(func, scx_bpf_dump_bstr, KF_TRUSTED_ARGS)
BTF_ID_FLAGS(func, scx_bpf_cpuperf_cap)
BTF_ID_FLAGS(func, scx_bpf_cpuperf_cur)
BTF_ID_FLAGS(func, scx_bpf_cpuperf_set)
+BTF_ID_FLAGS(func, scx_bpf_nr_node_ids)
BTF_ID_FLAGS(func, scx_bpf_nr_cpu_ids)
BTF_ID_FLAGS(func, scx_bpf_get_possible_cpumask, KF_ACQUIRE)
BTF_ID_FLAGS(func, scx_bpf_get_online_cpumask, KF_ACQUIRE)
diff --git a/tools/sched_ext/include/scx/common.bpf.h b/tools/sched_ext/include/scx/common.bpf.h
index ca7cc4108b45f..0e55877590901 100644
--- a/tools/sched_ext/include/scx/common.bpf.h
+++ b/tools/sched_ext/include/scx/common.bpf.h
@@ -70,6 +70,7 @@ void scx_bpf_dump_bstr(char *fmt, unsigned long long *data, u32 data_len) __ksym
u32 scx_bpf_cpuperf_cap(s32 cpu) __ksym __weak;
u32 scx_bpf_cpuperf_cur(s32 cpu) __ksym __weak;
void scx_bpf_cpuperf_set(s32 cpu, u32 perf) __ksym __weak;
+u32 scx_bpf_nr_node_ids(void) __ksym __weak;
u32 scx_bpf_nr_cpu_ids(void) __ksym __weak;
int scx_bpf_cpu_node(s32 cpu) __ksym __weak;
const struct cpumask *scx_bpf_get_possible_cpumask(void) __ksym __weak;
diff --git a/tools/sched_ext/include/scx/compat.bpf.h b/tools/sched_ext/include/scx/compat.bpf.h
index 5a9bcdb52e797..266f94fe479b7 100644
--- a/tools/sched_ext/include/scx/compat.bpf.h
+++ b/tools/sched_ext/include/scx/compat.bpf.h
@@ -189,6 +189,10 @@ static inline bool __COMPAT_is_enq_cpu_selected(u64 enq_flags)
*
* Preserve the following __COMPAT_scx_*_node macros until v6.17.
*/
+#define __COMPAT_scx_bpf_nr_node_ids() \
+ (bpf_ksym_exists(scx_bpf_nr_node_ids) ? \
+ scx_bpf_nr_node_ids() : 1U)
+
#define __COMPAT_scx_bpf_cpu_node(cpu) \
(bpf_ksym_exists(scx_bpf_cpu_node) ? \
scx_bpf_cpu_node(cpu) : 0)
--
2.48.1
On Mon, Feb 24, 2025 at 05:49:21PM +0100, Andrea Righi wrote: > Similarly to scx_bpf_cpu_ids(), introduce a new kfunc scx_bpf_nr_node_ids() > to expose the maximum number of NUMA nodes in the system. > > BFP schedulers can use this information together with the new node-aware > kfuncs, for example to create per-node DSQs, validate node IDs, etc. > > Signed-off-by: Andrea Righi <arighi@nvidia.com> Applied to sched_ext/for-6.15 w/ s/scx_bpf_cpu_ids()/scx_bpf_nr_cpu_ids()/ and s/BFP/BPF/. Thanks. -- tejun
On Mon, Feb 24, 2025 at 07:39:04AM -1000, Tejun Heo wrote: > On Mon, Feb 24, 2025 at 05:49:21PM +0100, Andrea Righi wrote: > > Similarly to scx_bpf_cpu_ids(), introduce a new kfunc scx_bpf_nr_node_ids() > > to expose the maximum number of NUMA nodes in the system. > > > > BFP schedulers can use this information together with the new node-aware > > kfuncs, for example to create per-node DSQs, validate node IDs, etc. > > > > Signed-off-by: Andrea Righi <arighi@nvidia.com> > > Applied to sched_ext/for-6.15 w/ s/scx_bpf_cpu_ids()/scx_bpf_nr_cpu_ids()/ > and s/BFP/BPF/. I even re-read that multiple times and still managed to mess it up... Thanks for catching it! :) -Andrea > > Thanks. > > -- > tejun
© 2016 - 2025 Red Hat, Inc.