if rcu_read_unlock_special() is deferred, we can invoke it earlier
in the schedule-tick.

Signed-off-by: Lai Jiangshan <la...@cn.fujitsu.com>
---
 kernel/rcutree_plugin.h |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
index 997b424..c9ff9f1 100644
--- a/kernel/rcutree_plugin.h
+++ b/kernel/rcutree_plugin.h
@@ -684,8 +684,11 @@ static void rcu_preempt_check_callbacks(int cpu)
 {
        struct task_struct *t = current;
 
-       if (t->rcu_read_lock_nesting == 0) {
+       if (t->rcu_read_lock_nesting == 0 ||
+           t->rcu_read_lock_nesting == INT_MIN) {
                rcu_preempt_qs(cpu);
+               if (t->rcu_read_unlock_special)
+                       rcu_read_unlock_special(t, false);
                return;
        }
        if (t->rcu_read_lock_nesting > 0 &&
-- 
1.7.4.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to