wq_calc_pod_cpumask(9)
๐ธ wq_calc_pod_cpumask โ kernel API manual, but make it cute ๐ธ
okay bestie, this is wq_calc_pod_cpumask(9) from the kernel API manual โ yes the whole manpage, yes we're reading it together, no you cannot skip it ๐
โจ NAME โจ
wq_calc_pod_cpumask โ literally the function that calculates a wq_attrs' cpumask for a pod ๐
โจ SYNOPSIS โจ
void wq_calc_pod_cpumask (struct workqueue_attrs *attrs , int cpu );
that's it. that's the whole signature. main character energy fr fr ๐
โจ ARGUMENTS โจ
attrsโ thewq_attrsof the default pwq of the target workqueue. like, the actual object we're poking at ๐ซถcpuโ the target CPU. that's the CPU, bestie ๐ฅ๏ธโจ
โจ DESCRIPTION โจ
so the whole vibe of this function: it calculates the cpumask that a workqueue with attrs should use on a pod, and the result gets stored in attrs->__pod_cpumask ๐พ โ that's the field, don't @ me, it really has the double underscore.
here's the tea on how it picks ๐:
- if pod affinity is not enabled, then
attrs->cpumaskis always used. like, always, no negotiations ๐ - if pod affinity is enabled and the pod has online CPUs requested by
attrs, then the cpumask it hands back is the intersection of the possible CPUs of the pod andattrs->cpumask. set math, slay ๐งฎโจ
โ ๏ธ and this is the part where you pay attention: the caller is responsible for ensuring that the cpumask of the pod stays stable. that's on you, bestie. it's giving "you break it you bought it" ๐ญ๐ซถ
โจ SEE ALSO โจ
okay so the kernel file ./kernel/workqueue.c is the mothership ๐ , and here's the entire friend group, no cap โ 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).
the saga continues ๐ฆ โ 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).
still going, iykyk ๐ธ โ 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), 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).
last stretch bestie, we're so close ๐ฅ โ 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โฆ all of them. every single one. ate and left no crumbs ๐๐
anyway that's the whole page ๐ง this lil cutie lives in ./kernel, and this edition is dated October 2026 โ so if you're reading this from the future, hiiii, hope the cpumasks are stable ๐๐ฆ periodt.
๐ฆ 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