linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: linux-kernel@vger.kernel.org
Cc: mingo@kernel.org, jiangshanlai@gmail.com, dipankar@in.ibm.com,
	akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
	josh@joshtriplett.org, tglx@linutronix.de, peterz@infradead.org,
	rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com,
	fweisbec@gmail.com, oleg@redhat.com,
	"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Subject: [PATCH tip/core/rcu 04/17] rcu: Clamp ->dynticks_nmi_nesting at eqs entry/exit
Date: Fri,  1 Dec 2017 11:36:35 -0800	[thread overview]
Message-ID: <1512157008-22355-4-git-send-email-paulmck@linux.vnet.ibm.com> (raw)
In-Reply-To: <20171201193625.GA20681@linux.vnet.ibm.com>

In preparation for merging dyntick-idle irq handling into the NMI
algorithm, clamp ->dynticks_nmi_nesting value to allow for interrupts
that enter but never leave and vice versa.

It is important that the clamping happen outside of the extended quiescent
state.  Otherwise, there will be short windows where irqs and NMIs fail
to convince RCU to start watching.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
 kernel/rcu/rcu.h  | 2 ++
 kernel/rcu/tree.c | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/kernel/rcu/rcu.h b/kernel/rcu/rcu.h
index 59c471de342a..f4a411964c41 100644
--- a/kernel/rcu/rcu.h
+++ b/kernel/rcu/rcu.h
@@ -56,6 +56,8 @@
 #define DYNTICK_TASK_EXIT_IDLE	   (DYNTICK_TASK_NEST_VALUE + \
 				    DYNTICK_TASK_FLAG)
 
+#define DYNTICK_IRQ_NONIDLE	((INT_MAX / 2) + 1)
+
 
 /*
  * Grace-period counter management.
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index 419f3c38e1b6..142cdd4a50c9 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -818,6 +818,7 @@ static void rcu_eqs_enter(bool user)
 	struct rcu_dynticks *rdtp;
 
 	rdtp = this_cpu_ptr(&rcu_dynticks);
+	WRITE_ONCE(rdtp->dynticks_nmi_nesting, 0);
 	WARN_ON_ONCE(IS_ENABLED(CONFIG_RCU_EQS_DEBUG) &&
 		     (rdtp->dynticks_nesting & DYNTICK_TASK_NEST_MASK) == 0);
 	if ((rdtp->dynticks_nesting & DYNTICK_TASK_NEST_MASK) == DYNTICK_TASK_NEST_VALUE)
@@ -1008,6 +1009,7 @@ static void rcu_eqs_exit(bool user)
 		rcu_eqs_exit_common(DYNTICK_TASK_EXIT_IDLE, user);
 		rdtp->dynticks_nesting = DYNTICK_TASK_EXIT_IDLE;
 		__this_cpu_dec(disable_rcu_irq_enter);
+		WRITE_ONCE(rdtp->dynticks_nmi_nesting, DYNTICK_IRQ_NONIDLE);
 	}
 }
 
-- 
2.5.2

  parent reply	other threads:[~2017-12-01 19:40 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-01 19:36 [PATCH tip/core/rcu 0/17] RCU dyntick updates for v4.16 Paul E. McKenney
2017-12-01 19:36 ` [PATCH tip/core/rcu 01/17] rcu: Avoid ->dynticks_nmi_nesting store tearing Paul E. McKenney
2017-12-01 19:36 ` [PATCH tip/core/rcu 02/17] rcu: Reduce dyntick-idle state space Paul E. McKenney
2017-12-01 19:36 ` [PATCH tip/core/rcu 03/17] rcu: Move rcu_nmi_{enter,exit}() to prepare for consolidation Paul E. McKenney
2017-12-01 19:36 ` Paul E. McKenney [this message]
2017-12-01 19:36 ` [PATCH tip/core/rcu 05/17] rcu: Define rcu_irq_{enter,exit}() in terms of rcu_nmi_{enter,exit}() Paul E. McKenney
2017-12-01 19:36 ` [PATCH tip/core/rcu 06/17] rcu: Make ->dynticks_nesting be a simple counter Paul E. McKenney
2017-12-01 19:36 ` [PATCH tip/core/rcu 07/17] rcu: Eliminate rcu_irq_enter_disabled() Paul E. McKenney
2017-12-01 19:36 ` [PATCH tip/core/rcu 08/17] rcu: Add tracing to irq/NMI dyntick-idle transitions Paul E. McKenney
2017-12-01 19:36 ` [PATCH tip/core/rcu 09/17] rcu: Shrink ->dynticks_{nmi_,}nesting from long long to long Paul E. McKenney
2017-12-01 19:36 ` [PATCH tip/core/rcu 10/17] rcu: Add ->dynticks field to rcu_dyntick trace event Paul E. McKenney
2017-12-01 19:36 ` [PATCH tip/core/rcu 11/17] rcu: Stop duplicating lockdep checks in RCU's idle-entry code Paul E. McKenney
2017-12-01 19:36 ` [PATCH tip/core/rcu 12/17] rcu: Avoid ->dynticks_nesting store tearing Paul E. McKenney
2017-12-01 19:36 ` [PATCH tip/core/rcu 13/17] rcu: Fold rcu_eqs_enter_common() into rcu_eqs_enter() Paul E. McKenney
2017-12-01 19:36 ` [PATCH tip/core/rcu 14/17] rcu: Fold rcu_eqs_exit_common() into rcu_eqs_exit() Paul E. McKenney
2017-12-01 19:36 ` [PATCH tip/core/rcu 15/17] rcu: Simplify rcu_eqs_{enter,exit}() non-idle task debug code Paul E. McKenney
2017-12-01 19:36 ` [PATCH tip/core/rcu 16/17] doc: Update dyntick-idle design documentation for NMI/irq consolidation Paul E. McKenney
2017-12-01 19:36 ` [PATCH tip/core/rcu 17/17] tracing, rcu: Remove no longer used trace event rcu_prep_idle Paul E. McKenney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1512157008-22355-4-git-send-email-paulmck@linux.vnet.ibm.com \
    --to=paulmck@linux.vnet.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=dhowells@redhat.com \
    --cc=dipankar@in.ibm.com \
    --cc=edumazet@google.com \
    --cc=fweisbec@gmail.com \
    --cc=jiangshanlai@gmail.com \
    --cc=josh@joshtriplett.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mingo@kernel.org \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).