mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-08 19:09:57 +00:00
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: Andrea Righi <arighi@nvidia.com> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
@@ -6621,8 +6621,12 @@ __bpf_kfunc u32 scx_bpf_reenqueue_local(void)
|
|||||||
* CPUs disagree, they use %ENQUEUE_RESTORE which is bypassed to
|
* CPUs disagree, they use %ENQUEUE_RESTORE which is bypassed to
|
||||||
* the current local DSQ for running tasks and thus are not
|
* the current local DSQ for running tasks and thus are not
|
||||||
* visible to the BPF scheduler.
|
* 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;
|
continue;
|
||||||
|
|
||||||
dispatch_dequeue(rq, p);
|
dispatch_dequeue(rq, p);
|
||||||
|
|||||||
Reference in New Issue
Block a user