scx_propaga...t_irq_workfn(9)
β¨ scx_propagate_exit_irq_workfn π
okay bestie so this is a page from the Kernel API Manual, section 9 β yes, the big serious kernel-functions section, but we're gonna make it make sense. π«Ά
It's literally the manual page for scx_propagate_exit_irq_workfn, and honestly the name is a mouthful so let's just call it "the propagate-exit irq work fn" in our heads, mwah. π
πΈ NAME πΈ
scx_propagate_exit_irq_workfn β claim SCX_EXIT_PARENT on the exiting subtree. that's it, that's the whole gig. π
π SYNOPSIS π
void scx_propagate_exit_irq_workfn (struct irq_work *irq_work );
like, one arg, returns nothing, no cap. π
π¦ ARGUMENTS π¦
irq_workβ this bad boy right here isscx_sched.propagate_exit_irq_work. that exact field. don't @ me. β¨
π₯ DESCRIPTION π₯
so here's the tea, bestie. this function gets queued by scx_claim_exit after a non-PARENT claim. π« that's the context, that's where it comes from.
once it runs, it claims SCX_EXIT_PARENT on each descendant, which is giving every single one of them its own disable work. iconic behavior honestly. π
and the way that works is: most of the disabling is serialized, but ops.exit can take arbitrarily long π β like, no upper bound, it's just out here living its life β so running them in separate helper kthreads is what actually parallelizes it. main character scheduling energy fr fr. π₯
and the best part? no recursion, because only non-PARENT claims propagate. so it doesn't just keep going down forever like a group chat at 3am. π
π SEE ALSO π
the kernel file is ./kernel/sched/ext/ext.c btw β that's your source of truth, go look π΅οΈββοΈ
and here's the whole friend group, alphabetically-ish, all of them (9) pages, all of them relevant, all of them invited to the party π:
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_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. whole friend group. π
ngl if you're reading this page you're probably already deep in ./kernel/sched/ext and there's no going back, so hydrate and open the source file, bestie π
alright that's the whole page, mwah π β this cutie came out of ./kernel/sched/ext, dated October 2026, and it lives at scx_propaga...t_irq_workfn(9) in the Kernel API Manual (that's the truncated name, blame the column width not me π). go be iconic with your irq work. π§β¨
π¦ 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