For PREEMPT_RCU, the rcu_report_dead() is invoked means that the outgoing CPU mask is clear from leaf rcu_node and has no further need of RCU, so invoke rcu_preempt_depth() return value is always zero in rcu_report_dead(), if the current outgoing CPU rcu_data structure's cpu_no_qs.b.exp is true, the rcu_preempt_deferred_qs() will invoke rcu_report_exp_rdp() to report exp QS. for non-PREEMPT_RCU, the rcu_preempt_deferred_qs() is equivalent to rcu_report_exp_rdp(). Signed-off-by: Zqiang <qiang1.zhang@xxxxxxxxx> --- kernel/rcu/tree.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 6bb8e72bc815..0ca21ac0f064 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -4276,8 +4276,6 @@ void rcu_report_dead(unsigned int cpu) // Do any dangling deferred wakeups. do_nocb_deferred_wakeup(rdp); - /* QS for any half-done expedited grace period. */ - rcu_report_exp_rdp(rdp); rcu_preempt_deferred_qs(current); /* Remove outgoing CPU from mask in the leaf rcu_node structure. */ -- 2.25.1