Clearing t->rcu_read_unlock_special in one go makes the code more clearly. Signed-off-by: Lai Jiangshan <laijs@xxxxxxxxxxxxxxxxx> --- kernel/rcu/tree_plugin.h | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h index bb3bcdb5c9b8..e612c77dc446 100644 --- a/kernel/rcu/tree_plugin.h +++ b/kernel/rcu/tree_plugin.h @@ -420,6 +420,7 @@ static bool rcu_preempt_has_tasks(struct rcu_node *rnp) * Report deferred quiescent states. The deferral time can * be quite short, for example, in the case of the call from * rcu_read_unlock_special(). + * t->rcu_read_unlock_special is cleared after called. */ static void rcu_preempt_deferred_qs_irqrestore(struct task_struct *t, unsigned long flags) @@ -439,11 +440,9 @@ rcu_preempt_deferred_qs_irqrestore(struct task_struct *t, unsigned long flags) * t->rcu_read_unlock_special cannot change. */ special = t->rcu_read_unlock_special; - t->rcu_read_unlock_special.b.exp_hint = false; - t->rcu_read_unlock_special.b.deferred_qs = false; + t->rcu_read_unlock_special.s = 0; if (special.b.need_qs) { rcu_qs(); - t->rcu_read_unlock_special.b.need_qs = false; } /* @@ -459,8 +458,6 @@ rcu_preempt_deferred_qs_irqrestore(struct task_struct *t, unsigned long flags) /* Clean up if blocked during RCU read-side critical section. */ if (special.b.blocked) { - t->rcu_read_unlock_special.b.blocked = false; - /* * Remove this task from the list it blocked on. The task * now remains queued on the rcu_node corresponding to the -- 2.20.1