Re: [PATCH sched_ext/for-7.3 4/4] sched_ext: Split sub-scheduler implementation into sub.c
From: Andrea Righi
Date: Wed Jul 01 2026 - 06:11:36 EST
Hi Tejun,
On Tue, Jun 30, 2026 at 05:14:29PM -1000, Tejun Heo wrote:
> The sub-scheduler implementation has grown and will continue to expand. Move
> the sub-scheduler functions from ext.c into a new kernel/sched/ext/sub.c.
> sub.h holds the prototypes and the !CONFIG_EXT_SUB_SCHED no-op stubs.
>
> No functional change.
>
> Signed-off-by: Tejun Heo <tj@xxxxxxxxxx>
> ---
...
> +/**
> + * scx_bpf_sub_dispatch - Trigger dispatching on a child scheduler
> + * @cgroup_id: cgroup ID of the child scheduler to dispatch
> + * @aux: implicit BPF argument to access bpf_prog_aux hidden from BPF progs
> + *
> + * Allows a parent scheduler to trigger dispatching on one of its direct
> + * child schedulers. The child scheduler runs its dispatch operation to
> + * move tasks from dispatch queues to the local runqueue.
> + *
> + * Returns: true on success, false if cgroup_id is invalid, not a direct
> + * child, or caller lacks dispatch permission.
> + */
> +__bpf_kfunc bool scx_bpf_sub_dispatch(u64 cgroup_id, const struct bpf_prog_aux *aux)
> +{
> + struct rq *this_rq = this_rq();
> + struct scx_sched *parent, *child;
> +
> + guard(rcu)();
> + parent = scx_prog_sched(aux);
> + if (unlikely(!parent))
> + return false;
> +
> + child = scx_find_sub_sched(cgroup_id);
> +
> + if (unlikely(!child))
> + return false;
> +
> + if (unlikely(scx_parent(child) != parent)) {
> + scx_error(parent, "trying to dispatch a distant sub-sched on cgroup %llu",
> + cgroup_id);
> + return false;
> + }
> +
> + return scx_dispatch_sched(child, this_rq, this_rq->scx.sub_dispatch_prev,
> + true);
clangd isn't happy here, because we're missing the declaration of
scx_dispatch_sched(). It needs to be always inline. We can move the whole
function to internal.h, but that would require extra restructuring. Otherwise,
can relax the always inline condition?
>From a local build the stack allocation in bytes looks like this:
scx_bpf_sub_dispatch() scx_dispatch_sched() Per level 4 levels
-----------------------------------------------------------------
__always_inline 104 - 104 416
non-inline 72 72 144 576
-----------------------------------------------------------------
delta +40 +160
I think the saving is quite still small compared with nested BPF frames. WDYT?
Thanks,
-Andrea