workqueue_s...ound_cpumask(9)
π workqueue_set_unbound_cpumask(9) β like, the Kernel API Manual, section 9, bestie β¨
okay so real talk, this is a page from the Kernel API Manual (that's the (9) vibe, dev-kernel-core, we're in the big leagues) and honestly? it's a tiny function with a very big mood. it decides which CPUs your unbound workqueues are even allowed to look at. main character energy fr fr π
π NAME π
workqueue_set_unbound_cpumask β sets the low-level unbound cpumask. that's it. that's the whole job. and it eats. π
β¨ SYNOPSIS β¨
int workqueue_set_unbound_cpumask (cpumask_var_t cpumask );
just one argument, no drama, we love a single-parameter icon π«Ά
πΈ ARGUMENTS πΈ
cpumaskβ the cpumask you wanna set. like, the whole point. the moment. the assignment. you hand it acpumask_var_tand it goes to work π¦
π DESCRIPTION π
okay so lowkey hear me out: the low-level workqueues cpumask is a global cpumask, right? and what it does is it limits the affinity of all unbound workqueues. every single one. it's giving "one mask to rule them all" π
so workqueue_set_unbound_cpumask checks the cpumask you gave it (yes it's doing a vibe check first, slay), and then applies it to all unbound workqueues, and also updates all pwqs of them. all of them. no cap. every pwq out here getting a makeover β¨
ngl this is global-scope behaviour so likeβ¦ be sure you actually mean it before you call it π
π₯ RETURN π₯
bestie it returns an int, and here's the whole menu:
0β Success π (we love a win)-EINVALβ Invalid cpumask π (your mask did not pass the vibe check)-ENOMEMβ Failed to allocate memory for attrs or pwqs π (out here trying to allocate and the system said no bestie)
π SEE ALSO π
kay so this is the part where the page just spills the entire workqueue extended universe at you, and honestly? iconic. the kernel file to go read is ./kernel/workqueue.c, and then literally all of these:
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)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_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 whole friend group π go read them, iykyk π§
π anyway bestie that's the page! source is ./kernel and this drop is dated October 2026 β so yeah, mark your calendar, screenshot it, frame it, whatever π happy masking! πβ¨
π¦ 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