Commit 3183059a authored by Paul E. McKenney's avatar Paul E. McKenney Committed by Uladzislau Rezki (Sony)

rcu: Add lockdep checks and kernel-doc header to rcu_softirq_qs()

There is some indications that rcu_softirq_qs() might be more generally
used than anticipated.  This commit therefore adds some lockdep assertions
and some cautionary tales in a new kernel-doc header.

Link: https://lore.kernel.org/all/Zd4DXTyCf17lcTfq@debian.debian/Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Yan Zhai <yan@cloudflare.com>
Cc: <netdev@vger.kernel.org>
Signed-off-by: default avatarUladzislau Rezki (Sony) <urezki@gmail.com>
parent 39cd87c4
......@@ -240,8 +240,36 @@ static long rcu_get_n_cbs_cpu(int cpu)
return 0;
}
/**
* rcu_softirq_qs - Provide a set of RCU quiescent states in softirq processing
*
* Mark a quiescent state for RCU, Tasks RCU, and Tasks Trace RCU.
* This is a special-purpose function to be used in the softirq
* infrastructure and perhaps the occasional long-running softirq
* handler.
*
* Note that from RCU's viewpoint, a call to rcu_softirq_qs() is
* equivalent to momentarily completely enabling preemption. For
* example, given this code::
*
* local_bh_disable();
* do_something();
* rcu_softirq_qs(); // A
* do_something_else();
* local_bh_enable(); // B
*
* A call to synchronize_rcu() that began concurrently with the
* call to do_something() would be guaranteed to wait only until
* execution reached statement A. Without that rcu_softirq_qs(),
* that same synchronize_rcu() would instead be guaranteed to wait
* until execution reached statement B.
*/
void rcu_softirq_qs(void)
{
RCU_LOCKDEP_WARN(lock_is_held(&rcu_bh_lock_map) ||
lock_is_held(&rcu_lock_map) ||
lock_is_held(&rcu_sched_lock_map),
"Illegal rcu_softirq_qs() in RCU read-side critical section");
rcu_qs();
rcu_preempt_deferred_qs(current);
rcu_tasks_qs(current, false);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment