]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
sched_ext: Merge branch 'for-6.17-fixes' into for-6.18
authorTejun Heo <tj@kernel.org>
Tue, 23 Sep 2025 19:10:20 +0000 (09:10 -1000)
committerTejun Heo <tj@kernel.org>
Tue, 23 Sep 2025 19:10:20 +0000 (09:10 -1000)
Pull sched_ext/for-6.17-fixes to receive:

 55ed11b181c4 ("sched_ext: idle: Handle migration-disabled tasks in BPF code")

which conflicts with the following commit in for-6.18:

 2407bae23d1e ("sched_ext: Add the @sch parameter to ext_idle helpers")

The conflict is a simple context conflict which can be resolved by taking
the updated parts from both commits.

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

Simple merge
Simple merge
index c57779f0ad5766d2d9add928598185ef2f76cd99,537c6992bb63f77d31133e28ac9cddf03fd256ca..d2434c954848ef963eb23de34ab28b2bf347c2b9
@@@ -856,8 -856,33 +856,34 @@@ static bool check_builtin_idle_enabled(
        return false;
  }
  
 -static s32 select_cpu_from_kfunc(struct task_struct *p, s32 prev_cpu, u64 wake_flags,
+ /*
+  * Determine whether @p is a migration-disabled task in the context of BPF
+  * code.
+  *
+  * We can't simply check whether @p->migration_disabled is set in a
+  * sched_ext callback, because migration is always disabled for the current
+  * task while running BPF code.
+  *
+  * The prolog (__bpf_prog_enter) and epilog (__bpf_prog_exit) respectively
+  * disable and re-enable migration. For this reason, the current task
+  * inside a sched_ext callback is always a migration-disabled task.
+  *
+  * Therefore, when @p->migration_disabled == 1, check whether @p is the
+  * current task or not: if it is, then migration was not disabled before
+  * entering the callback, otherwise migration was disabled.
+  *
+  * Returns true if @p is migration-disabled, false otherwise.
+  */
+ static bool is_bpf_migration_disabled(const struct task_struct *p)
+ {
+       if (p->migration_disabled == 1)
+               return p != current;
+       else
+               return p->migration_disabled;
+ }
 +static s32 select_cpu_from_kfunc(struct scx_sched *sch, struct task_struct *p,
 +                               s32 prev_cpu, u64 wake_flags,
                                 const struct cpumask *allowed, u64 flags)
  {
        struct rq *rq;