insert_work(9)
π insert_work(9) β the Kernel API Manual, but make it make sense β¨
okay so bestie, you found yourself in the insert_work(9) page of the Kernel API Manual and honestly? it's a tiny one, so let's get you fluent in like thirty seconds π«Ά
β¨ NAME β¨
insert_work β insert a work into a pool. that's it. that's the whole thing. no cap. π
πΈ SYNOPSIS πΈ
void insert_work (struct pool_workqueue *pwq , struct work_struct *work
, struct list_head *head , unsigned int extra_flags );
look at that signature, it's giving "small function, big responsibilities" π
π¦ ARGUMENTS π¦
pwqβ thepwqthat this work belongs to, like whose group chat it's in πworkβ the actual work you're inserting. the main character of this whole operation πheadβ the insertion point. where it goes. the seating chart, basically πextra_flagsβ extraWORK_STRUCT_*flags to set. yes, they're extra, they're the sparkle β¨
π§ DESCRIPTION π§
so what actually happens: you insert work β which belongs to pwq β after head. that's the whole move. it's the "slide into the conversation right after this message" of kernel internals π
and extra_flags? those get or'd into the work_struct flags. so like, OR'd. bitwise. not "or, whatever" β actual bitwise or, no cap π₯
π CONTEXT π
this one runs under raw_spin_lock_irq(pool->lock).
no, seriously β that's the context. mind the lock, bestie. it's not a suggestion, it's the vibe check you must pass π
ngl, lock context is not the moment to freestyle. it's the moment to already be holding pool->lock with irqs off, periodt. π
π SEE ALSO π
the original page points you at the kernel file ./kernel/workqueue.c, and then it just... keeps going. and going. and going. so here it is, all of it, in order, no skipping β because we don't do that 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), 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)
like, that's the entire workqueue extended family showing up to the function's birthday party π literally everyone is here. iykyk π
that's the page, bestie β you ate. go hold that pool->lock and insert some work π¦
signed off with love from the ./kernel source, October 2026, page insert_work(9) β see you in the next man page, 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