tools/sched_ext: Add compat handling for sub-scheduler ops

Extend SCX_OPS_OPEN() with compatibility handling for ops.sub_attach()
and ops.sub_detach(), allowing scx C schedulers with sub-scheduler
support to run on kernels both with and without its support.

Cc: Cheng-Yang Chou <yphbchou0911@gmail.com>
Fixes: ebeca1f930 ("sched_ext: Introduce cgroup sub-sched support")
Signed-off-by: Andrea Righi <arighi@nvidia.com>
Reviewed-by: Cheng-Yang Chou <yphbchou0911@gmail.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
Andrea Righi
2026-03-22 07:35:46 +01:00
committed by Tejun Heo
parent 63f500c32a
commit f03ffe53ab

View File

@@ -160,6 +160,7 @@ static inline long scx_hotplug_seq(void)
* COMPAT:
* - v6.17: ops.cgroup_set_bandwidth()
* - v6.19: ops.cgroup_set_idle()
* - v7.1: ops.sub_attach(), ops.sub_detach(), ops.sub_cgroup_id
*/
#define SCX_OPS_OPEN(__ops_name, __scx_name) ({ \
struct __scx_name *__skel; \
@@ -181,6 +182,21 @@ static inline long scx_hotplug_seq(void)
fprintf(stderr, "WARNING: kernel doesn't support ops.cgroup_set_idle()\n"); \
__skel->struct_ops.__ops_name->cgroup_set_idle = NULL; \
} \
if (__skel->struct_ops.__ops_name->sub_attach && \
!__COMPAT_struct_has_field("sched_ext_ops", "sub_attach")) { \
fprintf(stderr, "WARNING: kernel doesn't support ops.sub_attach()\n"); \
__skel->struct_ops.__ops_name->sub_attach = NULL; \
} \
if (__skel->struct_ops.__ops_name->sub_detach && \
!__COMPAT_struct_has_field("sched_ext_ops", "sub_detach")) { \
fprintf(stderr, "WARNING: kernel doesn't support ops.sub_detach()\n"); \
__skel->struct_ops.__ops_name->sub_detach = NULL; \
} \
if (__skel->struct_ops.__ops_name->sub_cgroup_id > 0 && \
!__COMPAT_struct_has_field("sched_ext_ops", "sub_cgroup_id")) { \
fprintf(stderr, "WARNING: kernel doesn't support ops.sub_cgroup_id\n"); \
__skel->struct_ops.__ops_name->sub_cgroup_id = 0; \
} \
__skel; \
})