···849849See the comment headers in the source code (or the docbook generated850850from them) for more information.851851852852+However, given that there are no fewer than four families of RCU APIs853853+in the Linux kernel, how do you choose which one to use? The following854854+list can be helpful:855855+856856+a. Will readers need to block? If so, you need SRCU.857857+858858+b. What about the -rt patchset? If readers would need to block859859+ in an non-rt kernel, you need SRCU. If readers would block860860+ in a -rt kernel, but not in a non-rt kernel, SRCU is not861861+ necessary.862862+863863+c. Do you need to treat NMI handlers, hardirq handlers,864864+ and code segments with preemption disabled (whether865865+ via preempt_disable(), local_irq_save(), local_bh_disable(),866866+ or some other mechanism) as if they were explicit RCU readers?867867+ If so, you need RCU-sched.868868+869869+d. Do you need RCU grace periods to complete even in the face870870+ of softirq monopolization of one or more of the CPUs? For871871+ example, is your code subject to network-based denial-of-service872872+ attacks? If so, you need RCU-bh.873873+874874+e. Is your workload too update-intensive for normal use of875875+ RCU, but inappropriate for other synchronization mechanisms?876876+ If so, consider SLAB_DESTROY_BY_RCU. But please be careful!877877+878878+f. Otherwise, use RCU.879879+880880+Of course, this all assumes that you have determined that RCU is in fact881881+the right tool for your job.882882+8528838538848. ANSWERS TO QUICK QUIZZES854885