assign_work(9)
π assign_work(9) β Kernel API Manual π
okay so welcome to the Kernel API Manual page for assign_work(9), bestie. This is the workqueue assignment lore, and itβs lowkey iconic. Letβs get into it π
β¨
β¨ NAME β¨
assign_work β assign a work item and its linked work items to a worker. Thatβs the whole vibe: one work item, its linked besties, one worker. π«Ά
πΈ SYNOPSIS πΈ
bool assign_work (struct work_struct *work , struct worker *worker ,
struct work_struct **nextp );
π ARGUMENTS π
workβ the work to assign. The main-character work item, fr fr.workerβ the worker to assign to. The one getting the assignment. πΌnextpβ out parameter for nested worklist walking. yes, itβs the pointer-to-pointer that lets you walk nested worklists. π
π¦ DESCRIPTION π¦
Assign work and its linked work items to worker. If work is already being executed by another worker in the same pool, itβll be punted there. no cap, thatβs the rule. π
If nextp is not NULL, itβs updated to point to the next work of the last scheduled work. This allows assign_work to be nested inside list_for_each_entry_safe. So yes, nesting is allowed, and itβs giving very convenient π
.
Returns true if work was successfully assigned to worker. false if work was punted to another worker already executing it. Thatβs the return-value tea. π΅
π₯ SEE ALSO π₯
Kernel file ./kernel/workqueue.c β and the whole workqueue extended universe is here, bestie:
- Kernel file
./kernel/workqueue.c, plusfor_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),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),queue_work_on(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)
xoxo, your workqueue-obsessed bestie π β source/version: ./kernel; date: October 2026; page: assign_work(9) πβ¨
π¦ 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