scx_fill_cmask_scratch(9)
π scx_fill_cmask_scratch(9) β the Kernel API Manual moment π
okay bestie, today's manual page is from the Kernel API Manual, and it's about scx_fill_cmask_scratch β yes that's the whole name, it's giving "I have a lot of syllables and I'm not sorry" β¨
πΈ NAME πΈ
scx_fill_cmask_scratch β build this cpu's arena cmask from @cpumask π«Ά
π¦ SYNOPSIS π¦
struct scx_cmask * scx_fill_cmask_scratch (struct scx_sched *sch , const
struct cpumask *cpumask );
π ARGUMENTS π
schβ thescx_schedwhose scratch you're filling. it's their scratch, you're just visiting πcpumaskβ the cpus you want translated into cids. yes, translated. it's a whole thing.
β DESCRIPTION β
okay so here's the tea π β the scratch lives in BPF-writable arena memory, which means its header is lowkey untrustworthy. like, you literally cannot trust it. so instead of reading it, we rewrite it from kernel geometry instead. so quirky of us, but fr fr it's the safe move πβ¨
β οΈ and bestie, important: the caller must hold an rq lock so this cpu is the sole kernel writer for as long as the returned address is in use. not "should", not "maybe", must. this is a main-character-energy requirement and you WILL respect it ππ
π₯ SEE ALSO π₯
the kernel file is ./kernel/sched/ext/ext.c, and the whole friend group is here β not me listing every single one, but I have to, so here we go π«‘π
scx_is_descendant(9), rq_is_open(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)
and the bpf besties π β 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)
and the id/cpumask squad π§ β 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. the whole group chat. ππ«Ά
and that's the page!! this one came from the source tree at ./kernel/sched/ext and the version/date vibe is October 2026 β so yeah, we're reading docs from the future, iconic behavior tbh π¦β periodt π
π¦ 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