Commit 0203e0c3 authored by Tejun Heo's avatar Tejun Heo
Browse files

sched_ext: Dispatch from all scx_sched instances



The cgroup sub-sched support involves invasive changes to many areas of
sched_ext. The overall scaffolding is now in place and the next step is
implementing sub-sched enable/disable.

To enable partial testing and verification, update balance_one() to
dispatch from all scx_sched instances until it finds a task to run. This
should keep scheduling working when sub-scheds are enabled with tasks on
them. This will be replaced by BPF-driven hierarchical operation.

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Reviewed-by: default avatarAndrea Righi <arighi@nvidia.com>
parent 025b1bd4
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -2526,7 +2526,7 @@ static bool scx_dispatch_sched(struct scx_sched *sch, struct rq *rq,

static int balance_one(struct rq *rq, struct task_struct *prev)
{
	struct scx_sched *sch = scx_root;
	struct scx_sched *sch = scx_root, *pos;
	s32 cpu = cpu_of(rq);

	lockdep_assert_rq_held(rq);
@@ -2570,8 +2570,12 @@ static int balance_one(struct rq *rq, struct task_struct *prev)
	if (rq->scx.local_dsq.nr)
		goto has_tasks;

	/* dispatch @sch */
	if (scx_dispatch_sched(sch, rq, prev))
	/*
	 * TEMPORARY - Dispatch all scheds. This will be replaced by BPF-driven
	 * hierarchical operation.
	 */
	list_for_each_entry_rcu(pos, &scx_sched_all, all)
		if (scx_dispatch_sched(pos, rq, prev))
			goto has_tasks;

	/*