Commit 97e13ecb authored by Andrea Righi's avatar Andrea Righi Committed by Tejun Heo
Browse files

sched_ext: Skip per-CPU tasks in scx_bpf_reenqueue_local()



scx_bpf_reenqueue_local() can be invoked from ops.cpu_release() to give
tasks that are queued to the local DSQ a chance to migrate to other
CPUs, when a CPU is taken by a higher scheduling class.

However, there is no point re-enqueuing tasks that can only run on that
particular CPU, as they would simply be re-added to the same local DSQ
without any benefit.

Therefore, skip per-CPU tasks in scx_bpf_reenqueue_local().

Signed-off-by: default avatarAndrea Righi <arighi@nvidia.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 71d07880
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -6621,8 +6621,12 @@ __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)
		if (p->migration_pending || is_migration_disabled(p) || p->nr_cpus_allowed == 1)
			continue;

		dispatch_dequeue(rq, p);