schedule_on_each_cpu(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… 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 ⭐

  • 0 on success πŸŽ€
  • -errno on 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