scx_bypass(9)
Okay bestie, welcome to scx_bypass(9) β yes, this is a Kernel API Manual page, and no, we are not gonna ghost a single detail. β¨ This one is lowkey iconic: it's the whole [un]bypass situation for scx_ops, and it's literally about guaranteeing forward progress. π
π NAME π
scx_bypass β [Un]bypass scx_ops and guarantee forward progress. That's the vibe: flip bypass on or off and make sure stuff actually keeps moving, fr fr. π«Ά
β¨ SYNOPSIS β¨
Here's the signature, character for character, no autocorrect:
void scx_bypass (struct scx_sched *sch , bool bypass );
π«Ά ARGUMENTS π«Ά
schβ the sched you're bypassing, bestie.bypassβtruefor bypass,falsefor unbypass. No in-between, periodt.
π DESCRIPTION π
Bypassing guarantees that all runnable tasks make forward progress without trusting the BPF scheduler. That's the whole point, and it's kind of a big deal. π
And bestie, we literally can't grab any mutexes or rwsems β they might be held by tasks that the BPF scheduler is forgetting to run. Which unfortunately also excludes toggling the static branches. Yeah. It's giving "can't touch anything, must still make progress." π
So the workaround is: override a couple ops, modify behaviors based on the DISABLING state, and then cycle the queued tasks through dequeue/enqueue to force global FIFO scheduling. Slay. β¨
ops.select_cpuβ ignored, and the defaultselect_cpuis used. No cap.ops.enqueueβ ignored, and tasks are queued in simple global FIFO order.SCX_OPS_ENQ_LASTis also ignored. π«‘ops.dispatchβ ignored, periodt.dispatch_oneβ does not reportSCX_DSP_PREVon non-zero slice, because the slice can't be trusted. Whenever a tick triggers, the running task is rotated to the tail of the queue. Iconic behavior, honestly.pick_next_taskβ suppresses the zero slice warning. π€«scx_kick_cpuβ disabled to avoidirq_workmalfunction during PM operations.scx_prio_lessβ reverts to the defaultrunnable_atorder.
π¦ SEE ALSO π¦
Kernel file ./kernel/sched/ext/ext.c plus the entire (9) squad β every single one is invited to the group chat, no ghosting:
Kernel file ./kernel/sched/ext/ext.c 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_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_to_local___v2(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)
Signed, sealed, and delivered from ./kernel/sched/ext with an October 2026 timestamp β still rocking the scx_bypass(9) name, bestie. Go make forward progress and hydrate. πβ¨
π¦ 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