diff options
| -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. |
