diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2012-08-03 19:41:23 -0400 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2012-09-23 10:42:23 -0400 |
commit | 2aef619c7524d73d18ff7b102a1706066b69141d (patch) | |
tree | da1409acbdc4baca4858af9fbc7e413fd5efa0d0 | |
parent | 13dbf9140c726c307a9c7e2b7ff83cf95da3bb44 (diff) |
rcu: Document SRCU dead-CPU capabilities, emphasize read-side limits
The current documentation did not help someone grepping for SRCU to
learn that disabling preemption is not a replacement for srcu_read_lock(),
so upgrade the documentation to bring this out, not just for SRCU,
but also for RCU-bh. Also document the fact that SRCU readers are
respected on CPUs executing in user mode, idle CPUs, and even on
offline CPUs.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Reviewed-by: Lai Jiangshan <laijs@cn.fujitsu.com>
-rw-r--r-- | Documentation/RCU/checklist.txt | 6 | ||||
-rw-r--r-- | Documentation/RCU/whatisRCU.txt | 9 |
2 files changed, 13 insertions, 2 deletions
diff --git a/Documentation/RCU/checklist.txt b/Documentation/RCU/checklist.txt index fc103d7a0474..cdb20d41a44a 100644 --- a/Documentation/RCU/checklist.txt +++ b/Documentation/RCU/checklist.txt | |||
@@ -310,6 +310,12 @@ over a rather long period of time, but improvements are always welcome! | |||
310 | code under the influence of preempt_disable(), you instead | 310 | code under the influence of preempt_disable(), you instead |
311 | need to use synchronize_irq() or synchronize_sched(). | 311 | need to use synchronize_irq() or synchronize_sched(). |
312 | 312 | ||
313 | This same limitation also applies to synchronize_rcu_bh() | ||
314 | and synchronize_srcu(), as well as to the asynchronous and | ||
315 | expedited forms of the three primitives, namely call_rcu(), | ||
316 | call_rcu_bh(), call_srcu(), synchronize_rcu_expedited(), | ||
317 | synchronize_rcu_bh_expedited(), and synchronize_srcu_expedited(). | ||
318 | |||
313 | 12. Any lock acquired by an RCU callback must be acquired elsewhere | 319 | 12. Any lock acquired by an RCU callback must be acquired elsewhere |
314 | with softirq disabled, e.g., via spin_lock_irqsave(), | 320 | with softirq disabled, e.g., via spin_lock_irqsave(), |
315 | spin_lock_bh(), etc. Failing to disable irq on a given | 321 | spin_lock_bh(), etc. Failing to disable irq on a given |
diff --git a/Documentation/RCU/whatisRCU.txt b/Documentation/RCU/whatisRCU.txt index 69ee188515e7..bf0f6de2aa00 100644 --- a/Documentation/RCU/whatisRCU.txt +++ b/Documentation/RCU/whatisRCU.txt | |||
@@ -873,7 +873,7 @@ d. Do you need to treat NMI handlers, hardirq handlers, | |||
873 | and code segments with preemption disabled (whether | 873 | and code segments with preemption disabled (whether |
874 | via preempt_disable(), local_irq_save(), local_bh_disable(), | 874 | via preempt_disable(), local_irq_save(), local_bh_disable(), |
875 | or some other mechanism) as if they were explicit RCU readers? | 875 | or some other mechanism) as if they were explicit RCU readers? |
876 | If so, you need RCU-sched. | 876 | If so, RCU-sched is the only choice that will work for you. |
877 | 877 | ||
878 | e. Do you need RCU grace periods to complete even in the face | 878 | e. Do you need RCU grace periods to complete even in the face |
879 | of softirq monopolization of one or more of the CPUs? For | 879 | of softirq monopolization of one or more of the CPUs? For |
@@ -884,7 +884,12 @@ f. Is your workload too update-intensive for normal use of | |||
884 | RCU, but inappropriate for other synchronization mechanisms? | 884 | RCU, but inappropriate for other synchronization mechanisms? |
885 | If so, consider SLAB_DESTROY_BY_RCU. But please be careful! | 885 | If so, consider SLAB_DESTROY_BY_RCU. But please be careful! |
886 | 886 | ||
887 | g. Otherwise, use RCU. | 887 | g. Do you need read-side critical sections that are respected |
888 | even though they are in the middle of the idle loop, during | ||
889 | user-mode execution, or on an offlined CPU? If so, SRCU is the | ||
890 | only choice that will work for you. | ||
891 | |||
892 | h. Otherwise, use RCU. | ||
888 | 893 | ||
889 | Of course, this all assumes that you have determined that RCU is in fact | 894 | Of course, this all assumes that you have determined that RCU is in fact |
890 | the right tool for your job. | 895 | the right tool for your job. |