scx_rcu_cpu_stall(9)
π scx_rcu_cpu_stall β sched_ext RCU CPU stall handler
okay so this is from the Kernel API Manual bestie, and it's genuinely one of the more dramatic little functions in ./kernel/sched/ext/ext.c. sit down, we're talking about the moment your system is freaking out and this function has to make a choice π«Ά
β¨ NAME β¨
scx_rcu_cpu_stall β the sched_ext RCU CPU stall handler. yes that's the whole name, she's a mouthful, she's iconic π
πΈ SYNOPSIS πΈ
bool scx_rcu_cpu_stall (const struct cpumask *stalled_mask );
like, that's it. one argument, one bool back. lowkey elegant ngl β¨
π ARGUMENTS π
stalled_maskβ the bit mask of stalled CPUs. basically a little guest list of which CPUs are acting up π it's aconst struct cpumask *, so she's read-only, no touching.
π DESCRIPTION π
okay so here's the vibe check: RCU CPU stalls can happen for various reasons, and β important β those reasons may not be caused by the current BPF scheduler. like, don't blame the scheduler for everything bestie, sometimes it's not her fault π
but even though it might not be the scheduler's fault, the move here is to try kicking out the current scheduler in an attempt to recover the system back to a good state β and it does this before issuing panics. so like, eviction attempt first, full dramatic meltdown second. very main character energy, very "let me fix this before we all perish" π
the return value is a whole story though:
- it returns
trueif sched_ext is enabled and an abort was initiated β which may resolve the reported RCU stall π - it returns
falseif sched_ext is not enabled, or if someone else already initiated abort. like sorry girl, someone got there first π€·ββοΈ
no cap, the "someone else already initiated abort" case is real β this is not a "first come first served" situation, it's a "whoever gets there first wins and you just return false" situation. king behavior honestly.
π¦ SEE ALSO π¦
so. many. friends. π«Ά and they're all in the 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_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_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)
like I said. so many friends. ate and left no crumbs π
and that's the whole page bestie!! source is ./kernel/sched/ext, version stamp is October 2026 β so like, mark your calendar, this is the lore πβ¨π
π¦ 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