summaryrefslogtreecommitdiffstats
path: root/Documentation/RCU
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2015-10-07 18:52:25 -0400
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2015-12-05 15:33:26 -0500
commita4b575627e8d1a2498a921940813266d4e26ff56 (patch)
tree297bf78c5c5c4ca2bc7530ef6f2a5a2fca7359dd /Documentation/RCU
parent0825458b1dbc39ec6840ee2e45b1fedb1b4b4ca1 (diff)
documentation: Expand on scheduler/RCU deadlock requirements
This commit adds a second option for avoiding scheduler/RCU deadlocks, namely that preemption be disabled across the entire RCU read-side critical section in question. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'Documentation/RCU')
-rw-r--r--Documentation/RCU/Design/Requirements/Requirements.html14
-rw-r--r--Documentation/RCU/Design/Requirements/Requirements.htmlx14
2 files changed, 18 insertions, 10 deletions
diff --git a/Documentation/RCU/Design/Requirements/Requirements.html b/Documentation/RCU/Design/Requirements/Requirements.html
index 105247149975..ab513ed229d7 100644
--- a/Documentation/RCU/Design/Requirements/Requirements.html
+++ b/Documentation/RCU/Design/Requirements/Requirements.html
@@ -1942,12 +1942,16 @@ RCU depends on the scheduler, and the scheduler uses RCU to
1942protect some of its data structures. 1942protect some of its data structures.
1943This means the scheduler is forbidden from acquiring 1943This means the scheduler is forbidden from acquiring
1944the runqueue locks and the priority-inheritance locks 1944the runqueue locks and the priority-inheritance locks
1945in the middle of an outermost RCU read-side critical section unless 1945in the middle of an outermost RCU read-side critical section unless either
1946it also releases them before exiting that same 1946(1)&nbsp;it releases them before exiting that same
1947RCU read-side critical section. 1947RCU read-side critical section, or
1948This same prohibition also applies to any lock that is acquired 1948(2)&nbsp;preemption is disabled across
1949that entire RCU read-side critical section.
1950This same prohibition also applies (recursively!) to any lock that is acquired
1949while holding any lock to which this prohibition applies. 1951while holding any lock to which this prohibition applies.
1950Violating this rule results in deadlock. 1952Adhering to this rule prevents preemptible RCU from invoking
1953<tt>rcu_read_unlock_special()</tt> while either runqueue or
1954priority-inheritance locks are held, thus avoiding deadlock.
1951 1955
1952<p> 1956<p>
1953For RCU's part, the preemptible-RCU <tt>rcu_read_unlock()</tt> 1957For RCU's part, the preemptible-RCU <tt>rcu_read_unlock()</tt>
diff --git a/Documentation/RCU/Design/Requirements/Requirements.htmlx b/Documentation/RCU/Design/Requirements/Requirements.htmlx
index 5b76e21fa092..f7c817f235e0 100644
--- a/Documentation/RCU/Design/Requirements/Requirements.htmlx
+++ b/Documentation/RCU/Design/Requirements/Requirements.htmlx
@@ -2109,12 +2109,16 @@ RCU depends on the scheduler, and the scheduler uses RCU to
2109protect some of its data structures. 2109protect some of its data structures.
2110This means the scheduler is forbidden from acquiring 2110This means the scheduler is forbidden from acquiring
2111the runqueue locks and the priority-inheritance locks 2111the runqueue locks and the priority-inheritance locks
2112in the middle of an outermost RCU read-side critical section unless 2112in the middle of an outermost RCU read-side critical section unless either
2113it also releases them before exiting that same 2113(1)&nbsp;it releases them before exiting that same
2114RCU read-side critical section. 2114RCU read-side critical section, or
2115This same prohibition also applies to any lock that is acquired 2115(2)&nbsp;preemption is disabled across
2116that entire RCU read-side critical section.
2117This same prohibition also applies (recursively!) to any lock that is acquired
2116while holding any lock to which this prohibition applies. 2118while holding any lock to which this prohibition applies.
2117Violating this rule results in deadlock. 2119Adhering to this rule prevents preemptible RCU from invoking
2120<tt>rcu_read_unlock_special()</tt> while either runqueue or
2121priority-inheritance locks are held, thus avoiding deadlock.
2118 2122
2119<p> 2123<p>
2120For RCU's part, the preemptible-RCU <tt>rcu_read_unlock()</tt> 2124For RCU's part, the preemptible-RCU <tt>rcu_read_unlock()</tt>