Commit b214b04d authored by Andrea Righi's avatar Andrea Righi Committed by Tejun Heo
Browse files

tools/sched_ext: Provide a compatible helper for scx_bpf_events()



Introduce __COMPAT_scx_bpf_events() to use scx_bpf_events() in a
compatible way also with kernels that don't provide this kfunc.

This also fixes the following error with scx_qmap when running on a
kernel that does not provide scx_bpf_events():

 ; scx_bpf_events(&events, sizeof(events)); @ scx_qmap.bpf.c:777
 318: (b7) r2 = 72                     ; R2_w=72 async_cb
 319: <invalid kfunc call>
 kfunc 'scx_bpf_events' is referenced but wasn't resolved

Fixes: 9865f31d ("sched_ext: Add scx_bpf_events() and scx_read_event() for BPF schedulers")
Signed-off-by: default avatarAndrea Righi <arighi@nvidia.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 5ae51618
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -183,7 +183,15 @@ static inline bool __COMPAT_is_enq_cpu_selected(u64 enq_flags)
	 bpf_ktime_get_ns())

/*
 * v6.15: Introduce event counters.
 *
 * Preserve the following macro until v6.17.
 */
#define __COMPAT_scx_bpf_events(events, size)					\
	(bpf_ksym_exists(scx_bpf_events) ?					\
	 scx_bpf_events(events, size) : ({}))

/*
 * v6.15: Introduce NUMA-aware kfuncs to operate with per-node idle
 * cpumasks.
 *
+1 −1
Original line number Diff line number Diff line
@@ -774,7 +774,7 @@ static int monitor_timerfn(void *map, int *key, struct bpf_timer *timer)
	if (print_shared_dsq)
		dump_shared_dsq();

	scx_bpf_events(&events, sizeof(events));
	__COMPAT_scx_bpf_events(&events, sizeof(events));

	bpf_printk("%35s: %llu", "SCX_EV_SELECT_CPU_FALLBACK",
		   scx_read_event(&events, SCX_EV_SELECT_CPU_FALLBACK));