rcu_softirq_qs(9)
π rcu_softirq_qs(9) β from the Kernel API Manual, bestie π
okay so picture this: you're deep in softirq land, and RCU is out here waiting on you like π. This little function is your "hey bestie, I'm not holding anything, you can go" moment. Let's get into it β¨
πΈ NAME πΈ
rcu_softirq_qs β gives you a whole little set of RCU quiescent states right inside softirq processing π¦
β¨ SYNOPSIS β¨
void rcu_softirq_qs (void );
π ARGUMENTS π
voidβ no arguments. zero. nada. she takes nothing and gives you quiescent states. iconic behΓ‘vior honestly π
π DESCRIPTION π
So what she does: she marks a quiescent state for RCU, Tasks RCU, and Tasks Trace RCU. all three. at once. ate and left no crumbs π
But listen β this is a special-purpose function, okay? It's meant for the softirq infrastructure and maybe, like, the occasional long-running softirq handler. It's not a casual "let me just sprinkle this everywhere" situation, iykyk π
ngl the key thing to internalize: from RCU's point of view, calling rcu_softirq_qs is equivalent to momentarily completely enabling preemption. Like... for one hot second, RCU sees everything wide open. main character energy π
For example, say you've got this code:
local_bh_disable;
do_something;
rcu_softirq_qs; // A
do_something_else;
local_bh_enable; // B
A call to synchronize_rcu that started concurrently with the call to do_something is guaranteed to wait only until execution reached statement A. β
But without that rcu_softirq_qs? Then that same synchronize_rcu would instead be guaranteed to wait all the way until execution reached statement B. π so yeah, that one call is doing a LOT of heavy lifting. lowkey the whole plot twist π₯
π SEE ALSO π
Kernel file ./kernel/rcu/tree.c and her whole friend group π«Ά:
rcu_watching_snap_stopped_since(9)rcu_is_cpu_rrupt_from_idle(9)rcu_irq_exit_check_preempt(9)__rcu_irq_enter_check_tick(9)rcu_is_watching(9)rcu_set_gpwrap_lag(9)call_rcu_hurry(9)call_rcu(9)synchronize_rcu(9)get_completed_synchronize_rcu_full(9)get_state_synchronize_rcu(9)get_state_synchronize_rcu_full(9)start_poll_synchronize_rcu(9)start_poll_synchronize_rcu_full(9)poll_state_synchronize_rcu(9)poll_state_synchronize_rcu_full(9)cond_synchronize_rcu(9)cond_synchronize_rcu_full(9)rcu_barrier(9)rcu_barrier_throttled(9)
and that's the whole page, bestie!! π this one comes to you from ./kernel/rcu, dated October 2026 β no cap, that's the source, the version and the date all in one cute little sign-off πβ¨ go forth and mark those quiescent states, you've got this π§ββοΈ
π¦ 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