set_worker_dying(9)
π set_worker_dying β a Kernel API Manual moment (section 9, bestie)
okay so real talk: this is set_worker_dying(9) from the Kernel API Manual, section 9, and it's honestly one of those tiny little functions that does so much behind the scenes. it's giving "quiet kid in the back of the class who actually runs the whole group project." π«Ά
β¨ NAME β¨
set_worker_dying β Tag a worker for destruction π₯π
like yes, that's the whole pitch. we're marking a worker so it gets yeeted. no cap.
πΈ SYNOPSIS πΈ
void set_worker_dying (struct worker *worker , struct list_head *list );
that's it. two args. in, out, done. ate and left no crumbs. π
π ARGUMENTS π
workerβ the worker to be destroyed π this is the main character and honestly its arc is ending.listβ transfer worker away from itspool->idle_listand intolistβ¨ so we're not just deleting them, we're moving them first. very "moving out of the group chat before leaving the group chat" of us.
π¦ DESCRIPTION π¦
Tag worker for destruction and adjust pool stats accordingly. π₯
that's the whole flow, bestie: you mark it dying, and the pool's stats get updated so nothing's lying to you later. and here's the thing β
The worker should be idle. π like, please don't call this on a worker that's mid-task. it's tagged dying, not tagged "wrap up what you're doing." vibe check first, then call.
π CONTEXT π
raw_spin_lock_irq(pool->lock).
periodt. you must be holding pool->lock as a raw spinlock with IRQs off when you call this. that's the context, that's the requirement, no exceptions, iykyk. πβ‘
π SEE ALSO π
okay bestie, buckle up, because this list is long β it's the entire workqueue extended universe and i'm obsessed. the kernel file to go read is ./kernel/workqueue.c, and here's every single cross-reference, all 108 of them, no skips, no shortcuts: π§β¨
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)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)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)
literally the whole friend group. go say hi to all of them. πΈπ
and that's the page, bestie!! this one shipped out of ./kernel in October 2026 β so when you see that date stamp, you'll know exactly which era of workqueue lore you're reading. mwah πβ¨π
π¦ 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