nldsq_cursor_lost_task(9)
π nldsq_cursor_lost_task β¨
okay so this is a page straight out of the Kernel API Manual bestie, and it's giving "did somebody steal my task while I wasn't looking" energy. iconic question, honestly.
πΈ NAME πΈ
nldsq_cursor_lost_task β literally just checks whether somebody else swiped the task while you were out here iterating π«Ά
π SYNOPSIS π
bool nldsq_cursor_lost_task (struct scx_dsq_list_node *cursor , struct
rq *rq , struct scx_dispatch_q *dsq , struct task_struct *p );
π¦ ARGUMENTS π¦
cursorβ anscx_dsq_list_nodethat you set up withINIT_DSQ_LIST_CURSORβ¨rqβ therqthatpwas chillin' ondsqβ thedsqthatpwas chillin' onpβ the target task, the main character of this whole situation π
π DESCRIPTION π
So p is a task you got back from nldsq_cursor_next_task. Fabulous. But here's the thing β the locks may have been dropped and re-acquired inbetween π which means the world may have moved on without you. This function verifies that no one else took p, or is in the process of taking p, from dsq. no cap, it's a vibe check for task ownership.
On false return, the caller can assume full ownership of p. periodt. it's yours, go off π
ngl bestie, that "locks may have been dropped and re-acquired inbetween" line is the whole plot β don't skip it, that's the entire reason this function exists π
π₯ SEE ALSO π₯
Kernel file ./kernel/sched/ext/ext.c β and here's the whole friend group, every single one, no one left behind π«Ά:
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), 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)
and that's the whole page bestie, mwah π this little icon lives over in ./kernel/sched/ext, dated October 2026, and it signs off as nldsq_cursor_lost_task(9) π go check if your task got stolen, love u, bye π¦
π¦ 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