Don't need to set ->rcu_read_lock_nesting negative, irq-protected rcu_preempt_deferred_qs_irqrestore() doesn't expect ->rcu_read_lock_nesting to be negative to work, it even doesn't access to ->rcu_read_lock_nesting any more. It is true that NMI over rcu_preempt_deferred_qs_irqrestore() may access to ->rcu_read_lock_nesting, but it is still safe since rcu_read_unlock_special() can protect itself from NMI. Signed-off-by: Lai Jiangshan <laijs@xxxxxxxxxxxxxxxxx> --- kernel/rcu/tree_plugin.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h index 82595db04eec..9fe8138ed3c3 100644 --- a/kernel/rcu/tree_plugin.h +++ b/kernel/rcu/tree_plugin.h @@ -555,16 +555,11 @@ static bool rcu_preempt_need_deferred_qs(struct task_struct *t) static void rcu_preempt_deferred_qs(struct task_struct *t) { unsigned long flags; - bool couldrecurse = t->rcu_read_lock_nesting >= 0; if (!rcu_preempt_need_deferred_qs(t)) return; - if (couldrecurse) - t->rcu_read_lock_nesting -= RCU_NEST_BIAS; local_irq_save(flags); rcu_preempt_deferred_qs_irqrestore(t, flags); - if (couldrecurse) - t->rcu_read_lock_nesting += RCU_NEST_BIAS; } /* -- 2.20.1