nldsq_next_task(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ¦‹ nldsq_next_task πŸ¦‹

okay so real talk, bestie β€” this is a page from the Kernel API Manual, section 9, and the star of the show is nldsq_next_task(9). Say it with me: iterate to the next task in a non-local DSQ. Iconic. No cap. πŸ’…


✨ NAME ✨

nldsq_next_task β€” literally just walks you to the next task inside a non-local DSQ. That's the whole vibe. πŸŽ€


🌸 SYNOPSIS 🌸

struct task_struct * nldsq_next_task (struct scx_dispatch_q *dsq ,
struct task_struct *cur , bool rev );

copy it exactly like that, don't get creative with it, she's sensitive 🫢


πŸ’– ARGUMENTS πŸ’–

  • dsq β€” the non-local dsq you're iterating over. this is the thing you're scrolling through, like a playlist but for tasks 🎧
  • cur β€” your current position. pass NULL to start the iteration from the top, like hitting play from the beginning ⭐
  • rev β€” walk backwards. yes, you can go the other way. main character energy πŸ’€

πŸ”₯ DESCRIPTION πŸ”₯

Returns NULL when the iteration is finished. periodt. that's the entire description, she's a woman of few words and honestly? obsessed. ✨

So like β€” you keep calling her, she keeps handing you the next task, and the moment there's nothing left to hand over she hits you with NULL and you know the party's over. πŸŽ‰


🌈 SEE ALSO 🌈

Kernel file ./kernel/sched/ext/ext.c plus the whole squad β€” every single one, no cap, here they are:

scx_is_descendant(9), rq_is_open(9), scx_fill_cmask_scratch(9), scx_call_op_set_cpumask(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), 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. the whole squad. iykyk πŸ’œ


lowkey important: that NULL return is how you know the iteration is finished β€” she's not being rude, she's just done. πŸ™ˆ

and that's the page, bestie!! πŸŽ€ this little cutie comes to you from ./kernel/sched/ext, dated October 2026 β€” slay, timestamped and everything. go read some tasks, ily, bye πŸ¦‹βœ¨πŸ’–

πŸ“¦ where this page comes from