diff options
| -rw-r--r-- | Documentation/RCU/checklist.txt | 26 | ||||
| -rw-r--r-- | Documentation/RCU/lockdep.txt | 5 | ||||
| -rw-r--r-- | Documentation/RCU/rcubarrier.txt | 15 |
3 files changed, 35 insertions, 11 deletions
diff --git a/Documentation/RCU/checklist.txt b/Documentation/RCU/checklist.txt index 31ef8fe07f82..79e789b8b8ea 100644 --- a/Documentation/RCU/checklist.txt +++ b/Documentation/RCU/checklist.txt | |||
| @@ -217,9 +217,14 @@ over a rather long period of time, but improvements are always welcome! | |||
| 217 | whether the increased speed is worth it. | 217 | whether the increased speed is worth it. |
| 218 | 218 | ||
| 219 | 8. Although synchronize_rcu() is slower than is call_rcu(), it | 219 | 8. Although synchronize_rcu() is slower than is call_rcu(), it |
| 220 | usually results in simpler code. So, unless update performance | 220 | usually results in simpler code. So, unless update performance is |
| 221 | is critically important or the updaters cannot block, | 221 | critically important, the updaters cannot block, or the latency of |
| 222 | synchronize_rcu() should be used in preference to call_rcu(). | 222 | synchronize_rcu() is visible from userspace, synchronize_rcu() |
| 223 | should be used in preference to call_rcu(). Furthermore, | ||
| 224 | kfree_rcu() usually results in even simpler code than does | ||
| 225 | synchronize_rcu() without synchronize_rcu()'s multi-millisecond | ||
| 226 | latency. So please take advantage of kfree_rcu()'s "fire and | ||
| 227 | forget" memory-freeing capabilities where it applies. | ||
| 223 | 228 | ||
| 224 | An especially important property of the synchronize_rcu() | 229 | An especially important property of the synchronize_rcu() |
| 225 | primitive is that it automatically self-limits: if grace periods | 230 | primitive is that it automatically self-limits: if grace periods |
| @@ -268,7 +273,8 @@ over a rather long period of time, but improvements are always welcome! | |||
| 268 | e. Periodically invoke synchronize_rcu(), permitting a limited | 273 | e. Periodically invoke synchronize_rcu(), permitting a limited |
| 269 | number of updates per grace period. | 274 | number of updates per grace period. |
| 270 | 275 | ||
| 271 | The same cautions apply to call_rcu_bh() and call_rcu_sched(). | 276 | The same cautions apply to call_rcu_bh(), call_rcu_sched(), |
| 277 | call_srcu(), and kfree_rcu(). | ||
| 272 | 278 | ||
| 273 | 9. All RCU list-traversal primitives, which include | 279 | 9. All RCU list-traversal primitives, which include |
| 274 | rcu_dereference(), list_for_each_entry_rcu(), and | 280 | rcu_dereference(), list_for_each_entry_rcu(), and |
| @@ -296,9 +302,9 @@ over a rather long period of time, but improvements are always welcome! | |||
| 296 | all currently executing rcu_read_lock()-protected RCU read-side | 302 | all currently executing rcu_read_lock()-protected RCU read-side |
| 297 | critical sections complete. It does -not- necessarily guarantee | 303 | critical sections complete. It does -not- necessarily guarantee |
| 298 | that all currently running interrupts, NMIs, preempt_disable() | 304 | that all currently running interrupts, NMIs, preempt_disable() |
| 299 | code, or idle loops will complete. Therefore, if you do not have | 305 | code, or idle loops will complete. Therefore, if your |
| 300 | rcu_read_lock()-protected read-side critical sections, do -not- | 306 | read-side critical sections are protected by something other |
| 301 | use synchronize_rcu(). | 307 | than rcu_read_lock(), do -not- use synchronize_rcu(). |
| 302 | 308 | ||
| 303 | Similarly, disabling preemption is not an acceptable substitute | 309 | Similarly, disabling preemption is not an acceptable substitute |
| 304 | for rcu_read_lock(). Code that attempts to use preemption | 310 | for rcu_read_lock(). Code that attempts to use preemption |
| @@ -401,9 +407,9 @@ over a rather long period of time, but improvements are always welcome! | |||
| 401 | read-side critical sections. It is the responsibility of the | 407 | read-side critical sections. It is the responsibility of the |
| 402 | RCU update-side primitives to deal with this. | 408 | RCU update-side primitives to deal with this. |
| 403 | 409 | ||
| 404 | 17. Use CONFIG_PROVE_RCU, CONFIG_DEBUG_OBJECTS_RCU_HEAD, and | 410 | 17. Use CONFIG_PROVE_RCU, CONFIG_DEBUG_OBJECTS_RCU_HEAD, and the |
| 405 | the __rcu sparse checks to validate your RCU code. These | 411 | __rcu sparse checks (enabled by CONFIG_SPARSE_RCU_POINTER) to |
| 406 | can help find problems as follows: | 412 | validate your RCU code. These can help find problems as follows: |
| 407 | 413 | ||
| 408 | CONFIG_PROVE_RCU: check that accesses to RCU-protected data | 414 | CONFIG_PROVE_RCU: check that accesses to RCU-protected data |
| 409 | structures are carried out under the proper RCU | 415 | structures are carried out under the proper RCU |
diff --git a/Documentation/RCU/lockdep.txt b/Documentation/RCU/lockdep.txt index a102d4b3724b..cd83d2348fef 100644 --- a/Documentation/RCU/lockdep.txt +++ b/Documentation/RCU/lockdep.txt | |||
| @@ -64,6 +64,11 @@ checking of rcu_dereference() primitives: | |||
| 64 | but retain the compiler constraints that prevent duplicating | 64 | but retain the compiler constraints that prevent duplicating |
| 65 | or coalescsing. This is useful when when testing the | 65 | or coalescsing. This is useful when when testing the |
| 66 | value of the pointer itself, for example, against NULL. | 66 | value of the pointer itself, for example, against NULL. |
| 67 | rcu_access_index(idx): | ||
| 68 | Return the value of the index and omit all barriers, but | ||
| 69 | retain the compiler constraints that prevent duplicating | ||
| 70 | or coalescsing. This is useful when when testing the | ||
| 71 | value of the index itself, for example, against -1. | ||
| 67 | 72 | ||
| 68 | The rcu_dereference_check() check expression can be any boolean | 73 | The rcu_dereference_check() check expression can be any boolean |
| 69 | expression, but would normally include a lockdep expression. However, | 74 | expression, but would normally include a lockdep expression. However, |
diff --git a/Documentation/RCU/rcubarrier.txt b/Documentation/RCU/rcubarrier.txt index 38428c125135..2e319d1b9ef2 100644 --- a/Documentation/RCU/rcubarrier.txt +++ b/Documentation/RCU/rcubarrier.txt | |||
| @@ -79,7 +79,20 @@ complete. Pseudo-code using rcu_barrier() is as follows: | |||
| 79 | 2. Execute rcu_barrier(). | 79 | 2. Execute rcu_barrier(). |
| 80 | 3. Allow the module to be unloaded. | 80 | 3. Allow the module to be unloaded. |
| 81 | 81 | ||
| 82 | The rcutorture module makes use of rcu_barrier in its exit function | 82 | There are also rcu_barrier_bh(), rcu_barrier_sched(), and srcu_barrier() |
| 83 | functions for the other flavors of RCU, and you of course must match | ||
| 84 | the flavor of rcu_barrier() with that of call_rcu(). If your module | ||
| 85 | uses multiple flavors of call_rcu(), then it must also use multiple | ||
| 86 | flavors of rcu_barrier() when unloading that module. For example, if | ||
| 87 | it uses call_rcu_bh(), call_srcu() on srcu_struct_1, and call_srcu() on | ||
| 88 | srcu_struct_2(), then the following three lines of code will be required | ||
| 89 | when unloading: | ||
| 90 | |||
| 91 | 1 rcu_barrier_bh(); | ||
| 92 | 2 srcu_barrier(&srcu_struct_1); | ||
| 93 | 3 srcu_barrier(&srcu_struct_2); | ||
| 94 | |||
| 95 | The rcutorture module makes use of rcu_barrier() in its exit function | ||
| 83 | as follows: | 96 | as follows: |
| 84 | 97 | ||
| 85 | 1 static void | 98 | 1 static void |
