scx_task_iter_start(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 NAME 🌸

okay bestie, welcome to scx_task_iter_start(9) from the Kernel API Manual πŸ’– β€” this one locks scx_tasks_lock and starts a task iteration. Slay.

✨ SYNOPSIS ✨

void scx_task_iter_start (struct scx_task_iter *iter , struct cgroup
       *cgrp );

πŸŽ€ ARGUMENTS πŸŽ€

  • iter β€” the iterator to init 🫢
  • cgrp β€” optional root of cgroup subhierarchy to iterate πŸ‘€

πŸ’… DESCRIPTION πŸ’…

Okay so first thing: this initializes iter. Once it’s initialized, iter must eventually be stopped with scx_task_iter_stop β€” no leaving it hanging, bestie. 🫢

If cgrp is NULL, scx_tasks is used for iteration, and this function returns with scx_tasks_lock held and iter->cursor inserted into scx_tasks.

If cgrp is not NULL, cgrp and its descendants’ tasks are walked using iter->css_iter. The caller must be holding cgroup_lock to prevent cgroup task migrations. Like, actually holding it β€” this is not a vibe-check situation. 😭

The two modes of iterations are largely independent, and it’s likely that scx_tasks can be removed in favor of always using cgroup iteration if CONFIG_SCHED_CLASS_EXT depends on CONFIG_CGROUPS.

scx_tasks_lock and the rq lock may be released using scx_task_iter_unlock between this and the first next call or between any two next calls. If the locks are released between two next calls, the caller is responsible for ensuring that the task being iterated remains accessible either through RCU read lock or obtaining a reference count. Read that again, bestie; that’s on the caller. πŸ’…

All tasks which existed when the iteration started are guaranteed to be visited as long as they are not dead. Periodt. πŸ’€

πŸ¦‹ SEE ALSO πŸ¦‹

Kernel file ./kernel/sched/ext/ext.c, plus the whole SEE ALSO squad: 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_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), 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).

xoxo, from the ./kernel/sched/ext crew, dated October 2026 β€” catch you in scx_task_iter_start(9) πŸ’–βœ¨

πŸ“¦ where this page comes from