diff options
author | Tejun Heo <tj@kernel.org> | 2025-09-23 09:10:20 -1000 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2025-09-23 09:10:20 -1000 |
commit | ebfd5226ec365d0901d3ddee4aba9c737137645c (patch) | |
tree | 32957e60df4967a5afa6af7e642aeb2077414064 /kernel/sched/ext.c | |
parent | c0008a5632103eae31302e83d012e2d3b0cfad41 (diff) | |
parent | 55ed11b181c43d81ce03b50209e4e7c4a14ba099 (diff) |
sched_ext: Merge branch 'for-6.17-fixes' into for-6.18
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>
Diffstat (limited to 'kernel/sched/ext.c')
-rw-r--r-- | kernel/sched/ext.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c index fa3696f9e7d2..99a5f6429207 100644 --- a/kernel/sched/ext.c +++ b/kernel/sched/ext.c @@ -4662,6 +4662,9 @@ static int scx_enable(struct sched_ext_ops *ops, struct bpf_link *link) __setscheduler_class(p->policy, p->prio); struct sched_enq_and_set_ctx ctx; + if (!tryget_task_struct(p)) + continue; + if (old_class != new_class && p->se.sched_delayed) dequeue_task(task_rq(p), p, DEQUEUE_SLEEP | DEQUEUE_DELAYED); @@ -4674,6 +4677,7 @@ static int scx_enable(struct sched_ext_ops *ops, struct bpf_link *link) sched_enq_and_set_task(&ctx); check_class_changed(task_rq(p), p, old_class, p->prio); + put_task_struct(p); } scx_task_iter_stop(&sti); percpu_up_write(&scx_fork_rwsem); @@ -5740,12 +5744,8 @@ __bpf_kfunc u32 scx_bpf_reenqueue_local(void) * CPUs disagree, they use %ENQUEUE_RESTORE which is bypassed to * the current local DSQ for running tasks and thus are not * visible to the BPF scheduler. - * - * Also skip re-enqueueing tasks that can only run on this - * CPU, as they would just be re-added to the same local - * DSQ without any benefit. */ - if (p->migration_pending || is_migration_disabled(p) || p->nr_cpus_allowed == 1) + if (p->migration_pending) continue; dispatch_dequeue(rq, p); |