aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/RCU/whatisRCU.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/RCU/whatisRCU.txt')
-rw-r--r--Documentation/RCU/whatisRCU.txt18
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
839SRCU: Initialization/cleanup 841SRCU: Initialization/cleanup
@@ -855,27 +857,33 @@ list can be helpful:
855 857
856a. Will readers need to block? If so, you need SRCU. 858a. Will readers need to block? If so, you need SRCU.
857 859
858b. What about the -rt patchset? If readers would need to block 860b. 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
866c. 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
863c. Do you need to treat NMI handlers, hardirq handlers, 871d. 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
869d. Do you need RCU grace periods to complete even in the face 877e. 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
874e. Is your workload too update-intensive for normal use of 882f. 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
878f. Otherwise, use RCU. 886g. Otherwise, use RCU.
879 887
880Of course, this all assumes that you have determined that RCU is in fact 888Of course, this all assumes that you have determined that RCU is in fact
881the right tool for your job. 889the right tool for your job.