work_grab_pending(9)
π work_grab_pending(9) β the Kernel API Manual entry you didn't know you needed
okay so bestie, this is a page from the Kernel API Manual and it's about work_grab_pending β the function that literally steals a work item off the worklist and disables irq while it's at it. not me being dramatic, that's just what it does π«Ά
β¨ NAME β¨
work_grab_pending β steal work item from worklist and disable irq ππ₯
π SYNOPSIS π
bool work_grab_pending (struct work_struct *work , u32 cflags , unsigned
long *irq_flags );
like yes, it returns a bool, and yes, it's taking three arguments β she's a little high-maintenance but she's worth it π
πΈ ARGUMENTS πΈ
workβ the work item to steal. yeah. steal it. girlboss behaviour πcflagsβ theWORK_CANCEL_flags. ship them with the right vibes or don't ship them at all βirq_flagsβ the place to store IRQ state. it's giving "put your keys here so you don't lose them" π
π¦ DESCRIPTION π¦
So the whole point: this function grabs the PENDING bit of work. and when we say work can be in any stable state, we mean it β idle, on timer, or on worklist. all of them. no cap β¨
You can call this from any context. literally any. and heads up bestie: IRQ is disabled on return, with the IRQ state stored in *irq_flags. so the caller is responsible for re-enabling it via local_irq_restore. that's on you, not on her π
It returns true if work was pending, and false if idle. simple. iconic. periodt π
β οΈ fr fr: don't forget the local_irq_restore β she disabled irq on the way out and she is NOT turning it back on for you.
π SEE ALSO π
Kernel file ./kernel/workqueue.c, plus literally the entire workqueue friend group β iykyk ππ
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)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)
and that's the whole page bestie!! π this lil entry lives in ./kernel and it's dated October 2026 β so yeah, she's from the future, main character energy fr fr π§β¨ go grab that pending bit, restore those irqs, and slay π
π
π¦ 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