queue_work_on(9)
π queue_work_on(9) β like, the Kernel API Manual, bestie β¨
okay so real talk: this is a page straight out of the Kernel API Manual, and it's about pinning a work item to one specific CPU. It's short, it's spicy, and there are two whole ways to get yourself splatted. Let's go π«Ά
πΈ SYNOPSIS πΈ
bool queue_work_on (int cpu , struct workqueue_struct *wq , struct
work_struct *work );
yes that's the whole signature, she's not long, she's just precise π
π ARGUMENTS π
cpuβ the CPU number you want the work to actually execute on. this is the whole personality of the function ngl.wqβ the workqueue you're using. your queue. your vibe. your responsibility.workβ the work item being queued. the lil task itself π£
π DESCRIPTION π
So what we're doing here is queuing the work onto a specific CPU, and the caller β that's you, bestie β must ensure that CPU can't go away. That's the deal. That's the assignment. No cap.
And if you don't? If you fail to make sure that specified CPU can't disappear? Then it'll just execute on a randomly chosen CPU instead. Surprise! Chaos! A little roulette wheel of scheduling π
β οΈ but note well, okay β callers specifying a CPU that never has been online will get a splat. Not a warning. Not a gentle nudge. A splat. So maybe check that CPU exists first?? just a thought π
β RETURN β
falseβ if the work was already on a queue (been there, done that, she's already booked).trueβ otherwise. iconic behavior, work successfully queued π
π¦ SEE ALSO π¦
First up, the source of truth: Kernel file ./kernel/workqueue.c π
and then... the entire extended friend group. literally everyone. no gatekeeping here π
for_each_pool(9),for_each_pool_worker(9),for_each_pwq(9),worker_pool_assign_id(9),unbound_effective_cpumask(9),get_work_pool(9)worker_set_flags(9),worker_clr_flags(9),worker_enter_idle(9),worker_leave_idle(9),find_worker_executing_work(9),move_linked_works(9),assign_work(9)kick_pool_pick(9),kick_pool(9),wq_worker_running(9),wq_worker_sleeping(9),wq_worker_tick(9),wq_worker_last_func(9)wq_node_nr_active(9),wq_update_node_max_active(9),get_pwq(9),put_pwq(9),put_pwq_unlocked(9),pwq_tryinc_nr_active(9)pwq_activate_first_inactive(9),unplug_oldest_pwq(9),node_activate_pending_pwq(9),pwq_dec_nr_active(9),pwq_dec_nr_in_flight(9)try_to_grab_pending(9),work_grab_pending(9),insert_work(9),select_numa_node_cpu(9),queue_work_node(9)queue_delayed_work_on(9),mod_delayed_work_on(9),queue_rcu_work(9),worker_attach_to_pool(9),worker_detach_from_pool(9)create_worker(9),set_worker_dying(9),idle_worker_timeout(9),idle_cull_fn(9),maybe_create_worker(9),manage_workers(9)process_one_work(9),process_scheduled_works(9),worker_thread(9),rescuer_thread(9),check_flush_dependency(9),insert_wq_barrier(9)flush_workqueue_prep_pwqs(9),__flush_workqueue(9),drain_workqueue(9),flush_work(9),flush_delayed_work(9),flush_rcu_work(9)cancel_work_sync(9),cancel_delayed_work(9),cancel_delayed_work_sync(9),disable_work(9),disable_work_sync(9),enable_work(9)disable_delayed_work(9),disable_delayed_work_sync(9),enable_delayed_work(9),schedule_on_each_cpu(9),execute_in_process_context(9)free_workqueue_attrs(9),alloc_workqueue_attrs(9),init_worker_pool(9),put_unbound_pool(9),get_unbound_pool(9)wq_calc_pod_cpumask(9),apply_workqueue_attrs(9),unbound_wq_update_pwq(9),wq_adjust_max_active(9),destroy_workqueue(9)workqueue_set_max_active(9),workqueue_set_min_active(9),current_work(9),current_is_workqueue_rescuer(9),current_is_workqueue_mem_reclaim(9)workqueue_congested(9),work_busy(9),set_worker_desc(9),print_worker_info(9),show_one_workqueue(9),show_one_worker_pool(9)show_all_workqueues(9),show_freezable_workqueues(9),rebind_workers(9),restore_unbound_workers_cpumask(9),work_on_cpu_key(9)freeze_workqueues_begin(9),freeze_workqueues_busy(9),thaw_workqueues(9),workqueue_unbound_housekeeping_update(9),workqueue_set_unbound_cpumask(9)workqueue_sysfs_register(9),workqueue_sysfs_unregister(9),workqueue_init_early(9),workqueue_init(9)llc_count_cores(9),llc_populate_cpu_shard_id(9),precompute_cache_shard_ids(9),workqueue_init_topology(9)
like I said. everyone π but they're all baddies, read them π«Ά
mwah π that's the page. brought to you from ./kernel, all the way from October 2026 β see you in the next one, bestie β¨π
π¦ 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