public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.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, joel@joelfernandes.org,
	"Paul E. McKenney" <paulmck@linux.ibm.com>
Subject: [PATCH tip/core/rcu 18/20] doc: RCU scheduler spinlock rcu_read_unlock() restriction remains
Date: Sun, 11 Nov 2018 11:56:43 -0800	[thread overview]
Message-ID: <20181111195645.9205-18-paulmck@linux.ibm.com> (raw)
In-Reply-To: <20181111195619.GA6958@linux.ibm.com>

Given RCU flavor consolidation, when rcu_read_unlock() is invoked with
interrupts disabled, the reporting of the corresponding quiescent state is
deferred until interrupts are re-enabled.  There was therefore some hope
that this would allow dropping the restriction against holding scheduler
spinlocks across an rcu_read_unlock() without disabling interrupts across
the entire corresponding RCU read-side critical section.  Unfortunately,
the need to quickly provide a quiescent state to expedited grace periods
sometimes requires a call to raise_softirq() during rcu_read_unlock()
execution.  Because raise_softirq() can sometimes acquire the scheduler
spinlocks, the restriction must remain in effect.  This commit therefore
updates the RCU requirements documentation accordingly.

Signed-off-by: Paul E. McKenney <paulmck@linux.ibm.com>
---
 .../RCU/Design/Requirements/Requirements.html | 44 ++++++++++++-------
 1 file changed, 29 insertions(+), 15 deletions(-)

diff --git a/Documentation/RCU/Design/Requirements/Requirements.html b/Documentation/RCU/Design/Requirements/Requirements.html
index f74a2233865c..9fca73e03a98 100644
--- a/Documentation/RCU/Design/Requirements/Requirements.html
+++ b/Documentation/RCU/Design/Requirements/Requirements.html
@@ -2475,23 +2475,37 @@ for context-switch-heavy <tt>CONFIG_NO_HZ_FULL=y</tt> workloads,
 but there is room for further improvement.
 
 <p>
-In the past, it was forbidden to disable interrupts across an
-<tt>rcu_read_unlock()</tt> unless that interrupt-disabled region
-of code also included the matching <tt>rcu_read_lock()</tt>.
-Violating this restriction could result in deadlocks involving the
-scheduler's runqueue and priority-inheritance spinlocks.
-This restriction was lifted when interrupt-disabled calls to
-<tt>rcu_read_unlock()</tt> started deferring the reporting of
-the resulting RCU-preempt quiescent state until the end of that
+It is forbidden to hold any of scheduler's runqueue or priority-inheritance
+spinlocks across an <tt>rcu_read_unlock()</tt> unless interrupts have been
+disabled across the entire RCU read-side critical section, that is,
+up to and including the matching <tt>rcu_read_lock()</tt>.
+Violating this restriction can result in deadlocks involving these
+scheduler spinlocks.
+There was hope that this restriction might be lifted when interrupt-disabled
+calls to <tt>rcu_read_unlock()</tt> started deferring the reporting of
+the resulting RCU-preempt quiescent state until the end of the corresponding
 interrupts-disabled region.
-This deferred reporting means that the scheduler's runqueue and
-priority-inheritance locks cannot be held while reporting an RCU-preempt
-quiescent state, which lifts the earlier restriction, at least from
-a deadlock perspective.
-Unfortunately, real-time systems using RCU priority boosting may
+Unfortunately, timely reporting of the corresponding quiescent state
+to expedited grace periods requires a call to <tt>raise_softirq()</tt>,
+which can acquire these scheduler spinlocks.
+In addition, real-time systems using RCU priority boosting
 need this restriction to remain in effect because deferred
-quiescent-state reporting also defers deboosting, which in turn
-degrades real-time latencies.
+quiescent-state reporting would also defer deboosting, which in turn
+would degrade real-time latencies.
+
+<p>
+In theory, if a given RCU read-side critical section could be
+guaranteed to be less than one second in duration, holding a scheduler
+spinlock across that critical section's <tt>rcu_read_unlock()</tt>
+would require only that preemption be disabled across the entire
+RCU read-side critical section, not interrupts.
+Unfortunately, given the possibility of vCPU preemption, long-running
+interrupts, and so on, it is not possible in practice to guarantee
+that a given RCU read-side critical section will complete in less than
+one second.
+Therefore, as noted above, if scheduler spinlocks are held across
+a given call to <tt>rcu_read_unlock()</tt>, interrupts must be
+disabled across the entire RCU read-side critical section.
 
 <h3><a name="Tracing and RCU">Tracing and RCU</a></h3>
 
-- 
2.17.1


  parent reply	other threads:[~2018-11-11 19:57 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-11 19:56 [PATCH tip/core/rcu 0/20] Documentation updates for v4.21/v5.0 Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 01/20] doc: Set down forward-progress requirements Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 02/20] doc: Clarify RCU data-structure comment about rcu_tree fanout Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 03/20] doc: Remove rcu_preempt_state reference in stallwarn Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 04/20] doc: rcu: Update information about resched_cpu Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 05/20] doc: rcu: Remove rcu_dynticks from Data-Structures Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 06/20] doc: rcu: Update Data-Structures for RCU flavor consolidation Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 07/20] doc: rcu: Better clarify the rcu_segcblist ->len field Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 08/20] doc: rcu: Update description of gp_seq fields in rcu_data Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 09/20] doc: Document rcutorture forward-progress test kernel parameters Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 10/20] doc: rcu: Update core and full API in whatisRCU Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 11/20] doc: rcu: Add more rationale for using rcu_read_lock_sched in checklist Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 12/20] doc: rcu: Remove obsolete suggestion from checklist Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 13/20] doc: rcu: Remove obsolete checklist item about synchronize_rcu usage Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 14/20] doc: rcu: Encourage use of rcu_barrier in checklist Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 15/20] doc: Make reader aware of rcu_dereference_protected Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 16/20] doc: Remove obsolete (non-)requirement about disabling preemption Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 17/20] doc: Make listing in RCU perf/scale requirements use rcu_assign_pointer() Paul E. McKenney
2018-11-11 19:56 ` Paul E. McKenney [this message]
2018-11-11 19:56 ` [PATCH tip/core/rcu 19/20] doc: Correct parameter in stallwarn Paul E. McKenney
2018-11-11 19:56 ` [PATCH tip/core/rcu 20/20] doc: Fix "struction" typo in RCU memory-ordering documentation 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=20181111195645.9205-18-paulmck@linux.ibm.com \
    --to=paulmck@linux.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=joel@joelfernandes.org \
    --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