]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
sched_ext: Move scx_buildin_idle_enabled check to scx_bpf_select_cpu_dfl()
authorTejun Heo <tj@kernel.org>
Thu, 10 Oct 2024 21:41:44 +0000 (11:41 -1000)
committerTejun Heo <tj@kernel.org>
Thu, 10 Oct 2024 21:41:44 +0000 (11:41 -1000)
Move the sanity check from the inner function scx_select_cpu_dfl() to the
exported kfunc scx_bpf_select_cpu_dfl(). This doesn't cause behavior
differences and will allow using scx_select_cpu_dfl() in bypass mode
regardless of scx_builtin_idle_enabled.

Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/sched/ext.c

index 4e56230e6e4a4c0fcc3785c93ac5f7e1c4092a69..957acb6ef81beb3e61b1695ebf1e38fd43b79392 100644 (file)
@@ -3062,11 +3062,6 @@ static s32 scx_select_cpu_dfl(struct task_struct *p, s32 prev_cpu,
 
        *found = false;
 
-       if (!static_branch_likely(&scx_builtin_idle_enabled)) {
-               scx_ops_error("built-in idle tracking is disabled");
-               return prev_cpu;
-       }
-
        /*
         * If WAKE_SYNC, the waker's local DSQ is empty, and the system is
         * under utilized, wake up @p to the local DSQ of the waker. Checking
@@ -5870,16 +5865,21 @@ __bpf_kfunc_start_defs();
 __bpf_kfunc s32 scx_bpf_select_cpu_dfl(struct task_struct *p, s32 prev_cpu,
                                       u64 wake_flags, bool *is_idle)
 {
-       if (!scx_kf_allowed(SCX_KF_SELECT_CPU)) {
-               *is_idle = false;
-               return prev_cpu;
+       if (!static_branch_likely(&scx_builtin_idle_enabled)) {
+               scx_ops_error("built-in idle tracking is disabled");
+               goto prev_cpu;
        }
+
+       if (!scx_kf_allowed(SCX_KF_SELECT_CPU))
+               goto prev_cpu;
+
 #ifdef CONFIG_SMP
        return scx_select_cpu_dfl(p, prev_cpu, wake_flags, is_idle);
-#else
+#endif
+
+prev_cpu:
        *is_idle = false;
        return prev_cpu;
-#endif
 }
 
 __bpf_kfunc_end_defs();