]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
tools/sched_ext: Add compat handling for sub-scheduler ops
authorAndrea Righi <arighi@nvidia.com>
Sun, 22 Mar 2026 06:35:46 +0000 (07:35 +0100)
committerTejun Heo <tj@kernel.org>
Sun, 22 Mar 2026 20:03:05 +0000 (10:03 -1000)
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: ebeca1f930ea ("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>
tools/sched_ext/include/scx/compat.h

index 9e0c8f3161e87287ac8f0378e304d582efaac5dd..039854c490d5e1b2637503d5d19d86c9377ccf04 100644 (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;                                                                 \
 })