diff options
Diffstat (limited to 'Documentation/RCU/whatisRCU.txt')
-rw-r--r-- | Documentation/RCU/whatisRCU.txt | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/Documentation/RCU/whatisRCU.txt b/Documentation/RCU/whatisRCU.txt index 6ef692667e2f..8e8cdc2430b9 100644 --- a/Documentation/RCU/whatisRCU.txt +++ b/Documentation/RCU/whatisRCU.txt | |||
@@ -834,6 +834,8 @@ SRCU: Critical sections Grace period Barrier | |||
834 | 834 | ||
835 | srcu_read_lock synchronize_srcu N/A | 835 | srcu_read_lock synchronize_srcu N/A |
836 | srcu_read_unlock synchronize_srcu_expedited | 836 | srcu_read_unlock synchronize_srcu_expedited |
837 | srcu_read_lock_raw | ||
838 | srcu_read_unlock_raw | ||
837 | srcu_dereference | 839 | srcu_dereference |
838 | 840 | ||
839 | SRCU: Initialization/cleanup | 841 | SRCU: Initialization/cleanup |
@@ -855,27 +857,33 @@ list can be helpful: | |||
855 | 857 | ||
856 | a. Will readers need to block? If so, you need SRCU. | 858 | a. Will readers need to block? If so, you need SRCU. |
857 | 859 | ||
858 | b. What about the -rt patchset? If readers would need to block | 860 | b. Is it necessary to start a read-side critical section in a |
861 | hardirq handler or exception handler, and then to complete | ||
862 | this read-side critical section in the task that was | ||
863 | interrupted? If so, you need SRCU's srcu_read_lock_raw() and | ||
864 | srcu_read_unlock_raw() primitives. | ||
865 | |||
866 | c. What about the -rt patchset? If readers would need to block | ||
859 | in an non-rt kernel, you need SRCU. If readers would block | 867 | in an non-rt kernel, you need SRCU. If readers would block |
860 | in a -rt kernel, but not in a non-rt kernel, SRCU is not | 868 | in a -rt kernel, but not in a non-rt kernel, SRCU is not |
861 | necessary. | 869 | necessary. |
862 | 870 | ||
863 | c. Do you need to treat NMI handlers, hardirq handlers, | 871 | d. Do you need to treat NMI handlers, hardirq handlers, |
864 | and code segments with preemption disabled (whether | 872 | and code segments with preemption disabled (whether |
865 | via preempt_disable(), local_irq_save(), local_bh_disable(), | 873 | via preempt_disable(), local_irq_save(), local_bh_disable(), |
866 | or some other mechanism) as if they were explicit RCU readers? | 874 | or some other mechanism) as if they were explicit RCU readers? |
867 | If so, you need RCU-sched. | 875 | If so, you need RCU-sched. |
868 | 876 | ||
869 | d. Do you need RCU grace periods to complete even in the face | 877 | e. Do you need RCU grace periods to complete even in the face |
870 | of softirq monopolization of one or more of the CPUs? For | 878 | of softirq monopolization of one or more of the CPUs? For |
871 | example, is your code subject to network-based denial-of-service | 879 | example, is your code subject to network-based denial-of-service |
872 | attacks? If so, you need RCU-bh. | 880 | attacks? If so, you need RCU-bh. |
873 | 881 | ||
874 | e. Is your workload too update-intensive for normal use of | 882 | f. Is your workload too update-intensive for normal use of |
875 | RCU, but inappropriate for other synchronization mechanisms? | 883 | RCU, but inappropriate for other synchronization mechanisms? |
876 | If so, consider SLAB_DESTROY_BY_RCU. But please be careful! | 884 | If so, consider SLAB_DESTROY_BY_RCU. But please be careful! |
877 | 885 | ||
878 | f. Otherwise, use RCU. | 886 | g. Otherwise, use RCU. |
879 | 887 | ||
880 | Of course, this all assumes that you have determined that RCU is in fact | 888 | Of course, this all assumes that you have determined that RCU is in fact |
881 | the right tool for your job. | 889 | the right tool for your job. |