wq_worker_last_func(9)
β¨ NAME β¨
Welcome to the Kernel API Manual, bestie! Today's page is wq_worker_last_func(9), and the NAME tea is: wq_worker_last_func β retrieve worker's last work function. π
π SYNOPSIS π
work_func_t wq_worker_last_func (struct task_struct *task );
π«Ά ARGUMENTS π«Ά
taskβ Task to retrieve last work function of. That's the task you're asking about, and it matters for the stable-value caveat below. π
πΈ DESCRIPTION πΈ
Okay so this function determines the last function a worker executed. The scheduler calls it to get a worker's last known identity. πͺͺ It gets called during schedule when a kworker is going to sleep. Why? Because psi uses it to identify aggregation workers during dequeuing, so periodic aggregation can shut off when that worker is the last task in the system or cgroup to go to sleep. That's the whole point. π
Caveat era, and this one is important: because this function doesn't involve any workqueue-related locking, it only returns stable values when called from inside the scheduler's queuing and dequeuing paths β and when task, which must be a kworker, is guaranteed to not be processing any works. Do not expect stable results outside that situation, bestie. No cap. π
π CONTEXT π
Context check: raw_spin_lock_irq(rq->lock). π₯
β RETURN β
The last work function current executed as a worker β or NULL if it hasn't executed any work yet. That's the whole vibe check. β
π¦ SEE ALSO π¦
Go be nosy in the Kernel file ./kernel/workqueue.c, then check out the whole 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_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_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)
Source/version: ./kernel Β· date: October 2026. Stay slay, hydrate, and may your worker always know its last function. πβ¨
π¦ 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