scx_bpf_dsq_...o_local___v2(9)
π scx_bpf_dsq_...o_local___v2 β from the Kernel API Manual, section 9 π
okay bestie, so we're in the kernel API manual (section 9, the big-league function pages), and today's main character is scx_bpf_dsq_move_to_local___v2. say it three times fast, i dare you π
β¨ NAME β¨
scx_bpf_dsq_move_to_local___v2 β move a task from a DSQ to the current CPU's local DSQ π¦
πΈ SYNOPSIS πΈ
__bpf_kfunc bool scx_bpf_dsq_move_to_local___v2 (u64 dsq_id , u64 enq_flags , const struct bpf_prog_aux *aux );
like, that's the whole signature, copy it exactly, no notes π
π ARGUMENTS π
dsq_idβ the DSQ you're moving the task from. lowkey important: it must be a user-created DSQ. built-ins need not apply, we'll get to that πenq_flagsβ theSCX_ENQ_*flags, applied when the task lands.auxβ the implicit BPF argument that gives access tobpf_prog_aux, and it's hidden from BPF progs. so like, not your business, the kernel handles it π«Ά
π₯ DESCRIPTION π₯
so what it does: it moves a task from the non-local DSQ identified by dsq_id over to the current CPU's local DSQ for execution, with enq_flags applied. cute, right? β¨
the vibe check: it can only be called from ops.dispatch. that's the one and only place. no cap.
built-in DSQs (SCX_DSQ_GLOBAL and SCX_DSQ_LOCAL*) are not supported as sources β they simply don't get to sit at our table π
here's the tea:
- Local DSQs do support reenqueueing (a task can be picked up for execution, dequeued for property changes, or reenqueued), but the BPF scheduler cannot directly iterate or move tasks from them.
SCX_DSQ_GLOBALis similar but also doesn't support reenqueueing, because it maps to multiple per-node DSQs which makes the scope difficult to define. this may change in the future β so like, watch this space π
also, heads up, this function flushes the in-flight dispatches from scx_bpf_dsq_insert before it even tries to move from the specified DSQ. and it may also grab rq locks, which means it can't be called under any BPF locks π fr fr don't do it.
returns: true if a task has been moved, false if there isn't any task to move. simple as that, periodt.
β SEE ALSO β
the kernel file is ./kernel/sched/ext/ext.c, and bestie, the friend group is huge. everyone showed up to the group chat π
scx_is_descendant(9)rq_is_open(9)scx_fill_cmask_scratch(9)scx_call_op_set_cpumask(9)nldsq_next_task(9)nldsq_cursor_next_task(9)nldsq_cursor_lost_task(9)scx_task_iter_start(9)scx_task_iter_unlock(9)scx_task_iter_relock(9)scx_task_iter_stop(9)scx_task_iter_next(9)scx_task_iter_next_locked(9)scx_dump_event(9)wait_ops_state(9)scx_cpu_valid(9)schedule_deferred(9)schedule_deferred_locked(9)dsq_insert_head(9)set_task_slice_keep_oob(9)scx_task_slice_ended(9)move_remote_task_to_local_dsq(9)unlink_dsq_and_switch_rq_lock(9)move_task_between_dsqs(9)dispatch_to_local_dsq(9)finish_dispatch(9)scx_prio_less(9)__scx_init_task(9)task_dead_and_done(9)scx_tg_sched(9)scx_tg_knob_sched(9)handle_lockup(9)scx_rcu_cpu_stall(9)scx_softlockup(9)scx_hardlockup(9)unbypass_renotify_idle(9)scx_bypass(9)scx_propagate_exit_irq_workfn(9)scx_flush_disable_work(9)print_scx_info(9)scx_bpf_dsq_insert___v2(9)__scx_bpf_dsq_insert_vtime(9)scx_bpf_dispatch_nr_slots(9)scx_bpf_dispatch_cancel(9)scx_bpf_dsq_move_set_slice(9)scx_bpf_dsq_move_set_vtime(9)scx_bpf_dsq_move(9)scx_bpf_dsq_move_vtime(9)scx_bpf_reenqueue_local(9)scx_bpf_create_dsq(9)scx_bpf_task_set_slice(9)scx_bpf_task_set_dsq_vtime(9)scx_bpf_kick_cpu(9)scx_bpf_kick_cid(9)scx_bpf_dsq_nr_queued(9)scx_bpf_destroy_dsq(9)bpf_iter_scx_dsq_new(9)bpf_iter_scx_dsq_next(9)bpf_iter_scx_dsq_destroy(9)scx_bpf_dsq_peek(9)scx_bpf_dsq_reenq(9)scx_bpf_reenqueue_local___v2(9)scx_bpf_exit_bstr(9)scx_bpf_error_bstr(9)scx_bpf_dump_bstr(9)scx_bpf_cpuperf_cap(9)scx_bpf_cidperf_cap(9)scx_bpf_cpuperf_cur(9)scx_bpf_cidperf_cur(9)scx_bpf_cpuperf_set(9)scx_bpf_cidperf_set(9)scx_bpf_nr_node_ids(9)scx_bpf_nr_cpu_ids(9)scx_bpf_nr_cids(9)scx_bpf_nr_online_cids(9)scx_bpf_online_cmask(9)scx_bpf_this_cid(9)scx_bpf_get_possible_cpumask(9)scx_bpf_get_online_cpumask(9)scx_bpf_put_cpumask(9)scx_bpf_task_running(9)scx_bpf_task_cpu(9)scx_bpf_task_cid(9)scx_bpf_locked_rq(9)scx_bpf_cpu_curr(9)scx_bpf_cid_curr(9)scx_bpf_tid_to_task(9)scx_bpf_now(9)scx_bpf_events(9)scx_bpf_task_cgroup(9)
and that's the page, bestie π this one came from ./kernel/sched/ext, dated October 2026, and it lives in section 9 of the Kernel API Manual. go forth and dispatch responsibly, mwah ππ§
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms