Since the atomic variable rcu_expedited_nesting is initialized to true, so the rcu_gp_is_expedited() is always return true during system startup until the rcu_end_inkernel_boot() is called. this means that without setting rcupdate.rcu_normal=1 and before the rcu_end_inkernel_boot() is executed, regardless of whether the return value of srcu_might_be_idle() is true, call synchronize_srcu() always fall back to synchronize_srcu_expedited(), so there is no need to checking srcu_might_be_idle() return value. For the rcupdate.rcu_normal=0, rcupdate.rcu_normal_after_boot=0 and rcupdate.rcu_expedited=1 kernels, there is also no need to checking srcu_might_be_idle() return value. This commit therefore priority check rcu_gp_is_expedited() return value in synchronize_srcu(). Signed-off-by: Zqiang <qiang.zhang1211@xxxxxxxxx> --- kernel/rcu/srcutree.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c index 20d7a238d675..a819f11d9b90 100644 --- a/kernel/rcu/srcutree.c +++ b/kernel/rcu/srcutree.c @@ -1435,7 +1435,7 @@ EXPORT_SYMBOL_GPL(synchronize_srcu_expedited); */ void synchronize_srcu(struct srcu_struct *ssp) { - if (srcu_might_be_idle(ssp) || rcu_gp_is_expedited()) + if (rcu_gp_is_expedited() || srcu_might_be_idle(ssp)) synchronize_srcu_expedited(ssp); else __synchronize_srcu(ssp, true); -- 2.17.1