schedule_on_each_cpu(9)
π schedule_on_each_cpu(9) β like, the whole Kernel API Manual, but make it make sense
okay so bestie, welcome to the Kernel API Manual entry for schedule_on_each_cpu(9). pull up a chair, grab a lil snack π, and let's get into it.
β¨ NAME β¨
schedule_on_each_cpu β execute a function synchronously on each online CPU π«Ά
the way this one literally does what it says on the tin. no cap.
πΈ SYNOPSIS πΈ
int schedule_on_each_cpu (work_func_t func );
π¦ ARGUMENTS π¦
funcβ the function to call π like, the actual thing you want run on every online CPU. that's her. that's the main character.
π DESCRIPTION π
so here's the tea β: schedule_on_each_cpu executes func on each online CPU using the system workqueue, and then it blocks until all CPUs have completed. yes, blocks. like, it sits there and waits for everyone to finish. group project energy but it actually works π
β οΈ real talk though β schedule_on_each_cpu is very slow. like, very very slow. ngl this is not the function you call in a hot path, bestie. it's giving "I'll get there when I get there" π
β RETURN β
0on success π-errnoon failure π
π SEE ALSO π
okay this is the part where I need you to lock in, because the list is long long. like, iconic levels of long. π
first up, the kernel file itself: ./kernel/workqueue.c β that's where all the magic lives, iykyk.
and then... literally the entire workqueue extended universe π :
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)
still with me? good. keep going π§:
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 era π :
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), 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)
almost there, don't scroll away on me π₯:
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)
and the init/topology finale, the grand finale, the slay π:
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)
periodt. that's the whole list. every single one. you're welcome π
okay that's the page!! sourced straight from ./kernel, dated October 2026, and filed under the very iconic name schedule_on_each_cpu(9). mwah π go call a workqueue bestie, but maybe not this one too often, she's slow ππ«Ά
π¦ 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