rcu: Improve synchronize_rcu() diagnostics
Although TREE_PREEMPT_RCU indirectly uses might_sleep() to detect illegal use of synchronize_sched() and synchronize_rcu_bh() from within an RCU read-side critical section, this might_sleep() check is bypassed when there is only a single CPU (for example, when running an SMP kernel on a single-CPU system). This patch therefore adds a might_sleep() call to the rcu_blocking_is_gp() check that is unconditionally invoked from both synchronize_sched() and synchronize_rcu_bh(). Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
committed by
Paul E. McKenney
parent
4c62abc90b
commit
18fec7d875
@@ -83,6 +83,7 @@ extern void rcu_sched_force_quiescent_state(void);
|
|||||||
/* A context switch is a grace period for RCU-sched and RCU-bh. */
|
/* A context switch is a grace period for RCU-sched and RCU-bh. */
|
||||||
static inline int rcu_blocking_is_gp(void)
|
static inline int rcu_blocking_is_gp(void)
|
||||||
{
|
{
|
||||||
|
might_sleep(); /* Check for RCU read-side critical section. */
|
||||||
return num_online_cpus() == 1;
|
return num_online_cpus() == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user