scx_fill_cmask_scratch(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… 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 β€” the scx_sched whose 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