~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/RCU/whatisRCU.rst

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/RCU/whatisRCU.rst (Architecture sparc64) and /Documentation/RCU/whatisRCU.rst (Architecture i386)


  1 .. _whatisrcu_doc:                                  1 .. _whatisrcu_doc:
  2                                                     2 
  3 What is RCU?  --  "Read, Copy, Update"              3 What is RCU?  --  "Read, Copy, Update"
  4 ======================================              4 ======================================
  5                                                     5 
  6 Please note that the "What is RCU?" LWN series      6 Please note that the "What is RCU?" LWN series is an excellent place
  7 to start learning about RCU:                        7 to start learning about RCU:
  8                                                     8 
  9 | 1.    What is RCU, Fundamentally?  https://l      9 | 1.    What is RCU, Fundamentally?  https://lwn.net/Articles/262464/
 10 | 2.    What is RCU? Part 2: Usage   https://l     10 | 2.    What is RCU? Part 2: Usage   https://lwn.net/Articles/263130/
 11 | 3.    RCU part 3: the RCU API      https://l     11 | 3.    RCU part 3: the RCU API      https://lwn.net/Articles/264090/
 12 | 4.    The RCU API, 2010 Edition    https://l     12 | 4.    The RCU API, 2010 Edition    https://lwn.net/Articles/418853/
 13 |       2010 Big API Table           https://l     13 |       2010 Big API Table           https://lwn.net/Articles/419086/
 14 | 5.    The RCU API, 2014 Edition    https://l     14 | 5.    The RCU API, 2014 Edition    https://lwn.net/Articles/609904/
 15 |       2014 Big API Table           https://l     15 |       2014 Big API Table           https://lwn.net/Articles/609973/
 16 | 6.    The RCU API, 2019 Edition    https://l     16 | 6.    The RCU API, 2019 Edition    https://lwn.net/Articles/777036/
 17 |       2019 Big API Table           https://l     17 |       2019 Big API Table           https://lwn.net/Articles/777165/
 18                                                    18 
 19 For those preferring video:                        19 For those preferring video:
 20                                                    20 
 21 | 1.    Unraveling RCU Mysteries: Fundamentals     21 | 1.    Unraveling RCU Mysteries: Fundamentals          https://www.linuxfoundation.org/webinars/unraveling-rcu-usage-mysteries
 22 | 2.    Unraveling RCU Mysteries: Additional U     22 | 2.    Unraveling RCU Mysteries: Additional Use Cases  https://www.linuxfoundation.org/webinars/unraveling-rcu-usage-mysteries-additional-use-cases
 23                                                    23 
 24                                                    24 
 25 What is RCU?                                       25 What is RCU?
 26                                                    26 
 27 RCU is a synchronization mechanism that was ad     27 RCU is a synchronization mechanism that was added to the Linux kernel
 28 during the 2.5 development effort that is opti     28 during the 2.5 development effort that is optimized for read-mostly
 29 situations.  Although RCU is actually quite si     29 situations.  Although RCU is actually quite simple, making effective use
 30 of it requires you to think differently about      30 of it requires you to think differently about your code.  Another part
 31 of the problem is the mistaken assumption that     31 of the problem is the mistaken assumption that there is "one true way" to
 32 describe and to use RCU.  Instead, the experie     32 describe and to use RCU.  Instead, the experience has been that different
 33 people must take different paths to arrive at      33 people must take different paths to arrive at an understanding of RCU,
 34 depending on their experiences and use cases.      34 depending on their experiences and use cases.  This document provides
 35 several different paths, as follows:               35 several different paths, as follows:
 36                                                    36 
 37 :ref:`1.        RCU OVERVIEW <1_whatisRCU>`        37 :ref:`1.        RCU OVERVIEW <1_whatisRCU>`
 38                                                    38 
 39 :ref:`2.        WHAT IS RCU'S CORE API? <2_wha     39 :ref:`2.        WHAT IS RCU'S CORE API? <2_whatisRCU>`
 40                                                    40 
 41 :ref:`3.        WHAT ARE SOME EXAMPLE USES OF      41 :ref:`3.        WHAT ARE SOME EXAMPLE USES OF CORE RCU API? <3_whatisRCU>`
 42                                                    42 
 43 :ref:`4.        WHAT IF MY UPDATING THREAD CAN     43 :ref:`4.        WHAT IF MY UPDATING THREAD CANNOT BLOCK? <4_whatisRCU>`
 44                                                    44 
 45 :ref:`5.        WHAT ARE SOME SIMPLE IMPLEMENT     45 :ref:`5.        WHAT ARE SOME SIMPLE IMPLEMENTATIONS OF RCU? <5_whatisRCU>`
 46                                                    46 
 47 :ref:`6.        ANALOGY WITH READER-WRITER LOC     47 :ref:`6.        ANALOGY WITH READER-WRITER LOCKING <6_whatisRCU>`
 48                                                    48 
 49 :ref:`7.        ANALOGY WITH REFERENCE COUNTIN     49 :ref:`7.        ANALOGY WITH REFERENCE COUNTING <7_whatisRCU>`
 50                                                    50 
 51 :ref:`8.        FULL LIST OF RCU APIs <8_whati     51 :ref:`8.        FULL LIST OF RCU APIs <8_whatisRCU>`
 52                                                    52 
 53 :ref:`9.        ANSWERS TO QUICK QUIZZES <9_wh     53 :ref:`9.        ANSWERS TO QUICK QUIZZES <9_whatisRCU>`
 54                                                    54 
 55 People who prefer starting with a conceptual o     55 People who prefer starting with a conceptual overview should focus on
 56 Section 1, though most readers will profit by      56 Section 1, though most readers will profit by reading this section at
 57 some point.  People who prefer to start with a     57 some point.  People who prefer to start with an API that they can then
 58 experiment with should focus on Section 2.  Pe     58 experiment with should focus on Section 2.  People who prefer to start
 59 with example uses should focus on Sections 3 a     59 with example uses should focus on Sections 3 and 4.  People who need to
 60 understand the RCU implementation should focus     60 understand the RCU implementation should focus on Section 5, then dive
 61 into the kernel source code.  People who reaso     61 into the kernel source code.  People who reason best by analogy should
 62 focus on Section 6 and 7.  Section 8 serves as     62 focus on Section 6 and 7.  Section 8 serves as an index to the docbook
 63 API documentation, and Section 9 is the tradit     63 API documentation, and Section 9 is the traditional answer key.
 64                                                    64 
 65 So, start with the section that makes the most     65 So, start with the section that makes the most sense to you and your
 66 preferred method of learning.  If you need to      66 preferred method of learning.  If you need to know everything about
 67 everything, feel free to read the whole thing      67 everything, feel free to read the whole thing -- but if you are really
 68 that type of person, you have perused the sour     68 that type of person, you have perused the source code and will therefore
 69 never need this document anyway.  ;-)              69 never need this document anyway.  ;-)
 70                                                    70 
 71 .. _1_whatisRCU:                                   71 .. _1_whatisRCU:
 72                                                    72 
 73 1.  RCU OVERVIEW                                   73 1.  RCU OVERVIEW
 74 ----------------                                   74 ----------------
 75                                                    75 
 76 The basic idea behind RCU is to split updates      76 The basic idea behind RCU is to split updates into "removal" and
 77 "reclamation" phases.  The removal phase remov     77 "reclamation" phases.  The removal phase removes references to data items
 78 within a data structure (possibly by replacing     78 within a data structure (possibly by replacing them with references to
 79 new versions of these data items), and can run     79 new versions of these data items), and can run concurrently with readers.
 80 The reason that it is safe to run the removal      80 The reason that it is safe to run the removal phase concurrently with
 81 readers is the semantics of modern CPUs guaran     81 readers is the semantics of modern CPUs guarantee that readers will see
 82 either the old or the new version of the data      82 either the old or the new version of the data structure rather than a
 83 partially updated reference.  The reclamation      83 partially updated reference.  The reclamation phase does the work of reclaiming
 84 (e.g., freeing) the data items removed from th     84 (e.g., freeing) the data items removed from the data structure during the
 85 removal phase.  Because reclaiming data items      85 removal phase.  Because reclaiming data items can disrupt any readers
 86 concurrently referencing those data items, the     86 concurrently referencing those data items, the reclamation phase must
 87 not start until readers no longer hold referen     87 not start until readers no longer hold references to those data items.
 88                                                    88 
 89 Splitting the update into removal and reclamat     89 Splitting the update into removal and reclamation phases permits the
 90 updater to perform the removal phase immediate     90 updater to perform the removal phase immediately, and to defer the
 91 reclamation phase until all readers active dur     91 reclamation phase until all readers active during the removal phase have
 92 completed, either by blocking until they finis     92 completed, either by blocking until they finish or by registering a
 93 callback that is invoked after they finish.  O     93 callback that is invoked after they finish.  Only readers that are active
 94 during the removal phase need be considered, b     94 during the removal phase need be considered, because any reader starting
 95 after the removal phase will be unable to gain     95 after the removal phase will be unable to gain a reference to the removed
 96 data items, and therefore cannot be disrupted      96 data items, and therefore cannot be disrupted by the reclamation phase.
 97                                                    97 
 98 So the typical RCU update sequence goes someth     98 So the typical RCU update sequence goes something like the following:
 99                                                    99 
100 a.      Remove pointers to a data structure, s    100 a.      Remove pointers to a data structure, so that subsequent
101         readers cannot gain a reference to it.    101         readers cannot gain a reference to it.
102                                                   102 
103 b.      Wait for all previous readers to compl    103 b.      Wait for all previous readers to complete their RCU read-side
104         critical sections.                        104         critical sections.
105                                                   105 
106 c.      At this point, there cannot be any rea    106 c.      At this point, there cannot be any readers who hold references
107         to the data structure, so it now may s    107         to the data structure, so it now may safely be reclaimed
108         (e.g., kfree()d).                         108         (e.g., kfree()d).
109                                                   109 
110 Step (b) above is the key idea underlying RCU'    110 Step (b) above is the key idea underlying RCU's deferred destruction.
111 The ability to wait until all readers are done    111 The ability to wait until all readers are done allows RCU readers to
112 use much lighter-weight synchronization, in so    112 use much lighter-weight synchronization, in some cases, absolutely no
113 synchronization at all.  In contrast, in more     113 synchronization at all.  In contrast, in more conventional lock-based
114 schemes, readers must use heavy-weight synchro    114 schemes, readers must use heavy-weight synchronization in order to
115 prevent an updater from deleting the data stru    115 prevent an updater from deleting the data structure out from under them.
116 This is because lock-based updaters typically     116 This is because lock-based updaters typically update data items in place,
117 and must therefore exclude readers.  In contra    117 and must therefore exclude readers.  In contrast, RCU-based updaters
118 typically take advantage of the fact that writ    118 typically take advantage of the fact that writes to single aligned
119 pointers are atomic on modern CPUs, allowing a    119 pointers are atomic on modern CPUs, allowing atomic insertion, removal,
120 and replacement of data items in a linked stru    120 and replacement of data items in a linked structure without disrupting
121 readers.  Concurrent RCU readers can then cont    121 readers.  Concurrent RCU readers can then continue accessing the old
122 versions, and can dispense with the atomic ope    122 versions, and can dispense with the atomic operations, memory barriers,
123 and communications cache misses that are so ex    123 and communications cache misses that are so expensive on present-day
124 SMP computer systems, even in absence of lock     124 SMP computer systems, even in absence of lock contention.
125                                                   125 
126 In the three-step procedure shown above, the u    126 In the three-step procedure shown above, the updater is performing both
127 the removal and the reclamation step, but it i    127 the removal and the reclamation step, but it is often helpful for an
128 entirely different thread to do the reclamatio    128 entirely different thread to do the reclamation, as is in fact the case
129 in the Linux kernel's directory-entry cache (d    129 in the Linux kernel's directory-entry cache (dcache).  Even if the same
130 thread performs both the update step (step (a)    130 thread performs both the update step (step (a) above) and the reclamation
131 step (step (c) above), it is often helpful to     131 step (step (c) above), it is often helpful to think of them separately.
132 For example, RCU readers and updaters need not    132 For example, RCU readers and updaters need not communicate at all,
133 but RCU provides implicit low-overhead communi    133 but RCU provides implicit low-overhead communication between readers
134 and reclaimers, namely, in step (b) above.        134 and reclaimers, namely, in step (b) above.
135                                                   135 
136 So how the heck can a reclaimer tell when a re    136 So how the heck can a reclaimer tell when a reader is done, given
137 that readers are not doing any sort of synchro    137 that readers are not doing any sort of synchronization operations???
138 Read on to learn about how RCU's API makes thi    138 Read on to learn about how RCU's API makes this easy.
139                                                   139 
140 .. _2_whatisRCU:                                  140 .. _2_whatisRCU:
141                                                   141 
142 2.  WHAT IS RCU'S CORE API?                       142 2.  WHAT IS RCU'S CORE API?
143 ---------------------------                       143 ---------------------------
144                                                   144 
145 The core RCU API is quite small:                  145 The core RCU API is quite small:
146                                                   146 
147 a.      rcu_read_lock()                           147 a.      rcu_read_lock()
148 b.      rcu_read_unlock()                         148 b.      rcu_read_unlock()
149 c.      synchronize_rcu() / call_rcu()            149 c.      synchronize_rcu() / call_rcu()
150 d.      rcu_assign_pointer()                      150 d.      rcu_assign_pointer()
151 e.      rcu_dereference()                         151 e.      rcu_dereference()
152                                                   152 
153 There are many other members of the RCU API, b    153 There are many other members of the RCU API, but the rest can be
154 expressed in terms of these five, though most     154 expressed in terms of these five, though most implementations instead
155 express synchronize_rcu() in terms of the call    155 express synchronize_rcu() in terms of the call_rcu() callback API.
156                                                   156 
157 The five core RCU APIs are described below, th    157 The five core RCU APIs are described below, the other 18 will be enumerated
158 later.  See the kernel docbook documentation f    158 later.  See the kernel docbook documentation for more info, or look directly
159 at the function header comments.                  159 at the function header comments.
160                                                   160 
161 rcu_read_lock()                                   161 rcu_read_lock()
162 ^^^^^^^^^^^^^^^                                   162 ^^^^^^^^^^^^^^^
163         void rcu_read_lock(void);                 163         void rcu_read_lock(void);
164                                                   164 
165         This temporal primitive is used by a r    165         This temporal primitive is used by a reader to inform the
166         reclaimer that the reader is entering     166         reclaimer that the reader is entering an RCU read-side critical
167         section.  It is illegal to block while    167         section.  It is illegal to block while in an RCU read-side
168         critical section, though kernels built    168         critical section, though kernels built with CONFIG_PREEMPT_RCU
169         can preempt RCU read-side critical sec    169         can preempt RCU read-side critical sections.  Any RCU-protected
170         data structure accessed during an RCU     170         data structure accessed during an RCU read-side critical section
171         is guaranteed to remain unreclaimed fo    171         is guaranteed to remain unreclaimed for the full duration of that
172         critical section.  Reference counts ma    172         critical section.  Reference counts may be used in conjunction
173         with RCU to maintain longer-term refer    173         with RCU to maintain longer-term references to data structures.
174                                                   174 
175         Note that anything that disables botto    175         Note that anything that disables bottom halves, preemption,
176         or interrupts also enters an RCU read-    176         or interrupts also enters an RCU read-side critical section.
177         Acquiring a spinlock also enters an RC    177         Acquiring a spinlock also enters an RCU read-side critical
178         sections, even for spinlocks that do n    178         sections, even for spinlocks that do not disable preemption,
179         as is the case in kernels built with C    179         as is the case in kernels built with CONFIG_PREEMPT_RT=y.
180         Sleeplocks do *not* enter RCU read-sid    180         Sleeplocks do *not* enter RCU read-side critical sections.
181                                                   181 
182 rcu_read_unlock()                                 182 rcu_read_unlock()
183 ^^^^^^^^^^^^^^^^^                                 183 ^^^^^^^^^^^^^^^^^
184         void rcu_read_unlock(void);               184         void rcu_read_unlock(void);
185                                                   185 
186         This temporal primitives is used by a     186         This temporal primitives is used by a reader to inform the
187         reclaimer that the reader is exiting a    187         reclaimer that the reader is exiting an RCU read-side critical
188         section.  Anything that enables bottom    188         section.  Anything that enables bottom halves, preemption,
189         or interrupts also exits an RCU read-s    189         or interrupts also exits an RCU read-side critical section.
190         Releasing a spinlock also exits an RCU    190         Releasing a spinlock also exits an RCU read-side critical section.
191                                                   191 
192         Note that RCU read-side critical secti    192         Note that RCU read-side critical sections may be nested and/or
193         overlapping.                              193         overlapping.
194                                                   194 
195 synchronize_rcu()                                 195 synchronize_rcu()
196 ^^^^^^^^^^^^^^^^^                                 196 ^^^^^^^^^^^^^^^^^
197         void synchronize_rcu(void);               197         void synchronize_rcu(void);
198                                                   198 
199         This temporal primitive marks the end     199         This temporal primitive marks the end of updater code and the
200         beginning of reclaimer code.  It does     200         beginning of reclaimer code.  It does this by blocking until
201         all pre-existing RCU read-side critica    201         all pre-existing RCU read-side critical sections on all CPUs
202         have completed.  Note that synchronize    202         have completed.  Note that synchronize_rcu() will **not**
203         necessarily wait for any subsequent RC    203         necessarily wait for any subsequent RCU read-side critical
204         sections to complete.  For example, co    204         sections to complete.  For example, consider the following
205         sequence of events::                      205         sequence of events::
206                                                   206 
207                  CPU 0                  CPU 1     207                  CPU 0                  CPU 1                 CPU 2
208              ----------------- ---------------    208              ----------------- ------------------------- ---------------
209          1.  rcu_read_lock()                      209          1.  rcu_read_lock()
210          2.                    enters synchron    210          2.                    enters synchronize_rcu()
211          3.                                       211          3.                                               rcu_read_lock()
212          4.  rcu_read_unlock()                    212          4.  rcu_read_unlock()
213          5.                     exits synchron    213          5.                     exits synchronize_rcu()
214          6.                                       214          6.                                              rcu_read_unlock()
215                                                   215 
216         To reiterate, synchronize_rcu() waits     216         To reiterate, synchronize_rcu() waits only for ongoing RCU
217         read-side critical sections to complet    217         read-side critical sections to complete, not necessarily for
218         any that begin after synchronize_rcu()    218         any that begin after synchronize_rcu() is invoked.
219                                                   219 
220         Of course, synchronize_rcu() does not     220         Of course, synchronize_rcu() does not necessarily return
221         **immediately** after the last pre-exi    221         **immediately** after the last pre-existing RCU read-side critical
222         section completes.  For one thing, the    222         section completes.  For one thing, there might well be scheduling
223         delays.  For another thing, many RCU i    223         delays.  For another thing, many RCU implementations process
224         requests in batches in order to improv    224         requests in batches in order to improve efficiencies, which can
225         further delay synchronize_rcu().          225         further delay synchronize_rcu().
226                                                   226 
227         Since synchronize_rcu() is the API tha    227         Since synchronize_rcu() is the API that must figure out when
228         readers are done, its implementation i    228         readers are done, its implementation is key to RCU.  For RCU
229         to be useful in all but the most read-    229         to be useful in all but the most read-intensive situations,
230         synchronize_rcu()'s overhead must also    230         synchronize_rcu()'s overhead must also be quite small.
231                                                   231 
232         The call_rcu() API is an asynchronous     232         The call_rcu() API is an asynchronous callback form of
233         synchronize_rcu(), and is described in    233         synchronize_rcu(), and is described in more detail in a later
234         section.  Instead of blocking, it regi    234         section.  Instead of blocking, it registers a function and
235         argument which are invoked after all o    235         argument which are invoked after all ongoing RCU read-side
236         critical sections have completed.  Thi    236         critical sections have completed.  This callback variant is
237         particularly useful in situations wher    237         particularly useful in situations where it is illegal to block
238         or where update-side performance is cr    238         or where update-side performance is critically important.
239                                                   239 
240         However, the call_rcu() API should not    240         However, the call_rcu() API should not be used lightly, as use
241         of the synchronize_rcu() API generally    241         of the synchronize_rcu() API generally results in simpler code.
242         In addition, the synchronize_rcu() API    242         In addition, the synchronize_rcu() API has the nice property
243         of automatically limiting update rate     243         of automatically limiting update rate should grace periods
244         be delayed.  This property results in     244         be delayed.  This property results in system resilience in face
245         of denial-of-service attacks.  Code us    245         of denial-of-service attacks.  Code using call_rcu() should limit
246         update rate in order to gain this same    246         update rate in order to gain this same sort of resilience.  See
247         checklist.rst for some approaches to l    247         checklist.rst for some approaches to limiting the update rate.
248                                                   248 
249 rcu_assign_pointer()                              249 rcu_assign_pointer()
250 ^^^^^^^^^^^^^^^^^^^^                              250 ^^^^^^^^^^^^^^^^^^^^
251         void rcu_assign_pointer(p, typeof(p) v    251         void rcu_assign_pointer(p, typeof(p) v);
252                                                   252 
253         Yes, rcu_assign_pointer() **is** imple    253         Yes, rcu_assign_pointer() **is** implemented as a macro, though
254         it would be cool to be able to declare    254         it would be cool to be able to declare a function in this manner.
255         (And there has been some discussion of    255         (And there has been some discussion of adding overloaded functions
256         to the C language, so who knows?)         256         to the C language, so who knows?)
257                                                   257 
258         The updater uses this spatial macro to    258         The updater uses this spatial macro to assign a new value to an
259         RCU-protected pointer, in order to saf    259         RCU-protected pointer, in order to safely communicate the change
260         in value from the updater to the reade    260         in value from the updater to the reader.  This is a spatial (as
261         opposed to temporal) macro.  It does n    261         opposed to temporal) macro.  It does not evaluate to an rvalue,
262         but it does provide any compiler direc    262         but it does provide any compiler directives and memory-barrier
263         instructions required for a given comp    263         instructions required for a given compile or CPU architecture.
264         Its ordering properties are that of a     264         Its ordering properties are that of a store-release operation,
265         that is, any prior loads and stores re    265         that is, any prior loads and stores required to initialize the
266         structure are ordered before the store    266         structure are ordered before the store that publishes the pointer
267         to that structure.                        267         to that structure.
268                                                   268 
269         Perhaps just as important, rcu_assign_    269         Perhaps just as important, rcu_assign_pointer() serves to document
270         (1) which pointers are protected by RC    270         (1) which pointers are protected by RCU and (2) the point at which
271         a given structure becomes accessible t    271         a given structure becomes accessible to other CPUs.  That said,
272         rcu_assign_pointer() is most frequentl    272         rcu_assign_pointer() is most frequently used indirectly, via
273         the _rcu list-manipulation primitives     273         the _rcu list-manipulation primitives such as list_add_rcu().
274                                                   274 
275 rcu_dereference()                                 275 rcu_dereference()
276 ^^^^^^^^^^^^^^^^^                                 276 ^^^^^^^^^^^^^^^^^
277         typeof(p) rcu_dereference(p);             277         typeof(p) rcu_dereference(p);
278                                                   278 
279         Like rcu_assign_pointer(), rcu_derefer    279         Like rcu_assign_pointer(), rcu_dereference() must be implemented
280         as a macro.                               280         as a macro.
281                                                   281 
282         The reader uses the spatial rcu_derefe    282         The reader uses the spatial rcu_dereference() macro to fetch
283         an RCU-protected pointer, which return    283         an RCU-protected pointer, which returns a value that may
284         then be safely dereferenced.  Note tha    284         then be safely dereferenced.  Note that rcu_dereference()
285         does not actually dereference the poin    285         does not actually dereference the pointer, instead, it
286         protects the pointer for later derefer    286         protects the pointer for later dereferencing.  It also
287         executes any needed memory-barrier ins    287         executes any needed memory-barrier instructions for a given
288         CPU architecture.  Currently, only Alp    288         CPU architecture.  Currently, only Alpha needs memory barriers
289         within rcu_dereference() -- on other C    289         within rcu_dereference() -- on other CPUs, it compiles to a
290         volatile load.  However, no mainstream    290         volatile load.  However, no mainstream C compilers respect
291         address dependencies, so rcu_dereferen    291         address dependencies, so rcu_dereference() uses volatile casts,
292         which, in combination with the coding     292         which, in combination with the coding guidelines listed in
293         rcu_dereference.rst, prevent current c    293         rcu_dereference.rst, prevent current compilers from breaking
294         these dependencies.                       294         these dependencies.
295                                                   295 
296         Common coding practice uses rcu_derefe    296         Common coding practice uses rcu_dereference() to copy an
297         RCU-protected pointer to a local varia    297         RCU-protected pointer to a local variable, then dereferences
298         this local variable, for example as fo    298         this local variable, for example as follows::
299                                                   299 
300                 p = rcu_dereference(head.next)    300                 p = rcu_dereference(head.next);
301                 return p->data;                   301                 return p->data;
302                                                   302 
303         However, in this case, one could just     303         However, in this case, one could just as easily combine these
304         into one statement::                      304         into one statement::
305                                                   305 
306                 return rcu_dereference(head.ne    306                 return rcu_dereference(head.next)->data;
307                                                   307 
308         If you are going to be fetching multip    308         If you are going to be fetching multiple fields from the
309         RCU-protected structure, using the loc    309         RCU-protected structure, using the local variable is of
310         course preferred.  Repeated rcu_derefe    310         course preferred.  Repeated rcu_dereference() calls look
311         ugly, do not guarantee that the same p    311         ugly, do not guarantee that the same pointer will be returned
312         if an update happened while in the cri    312         if an update happened while in the critical section, and incur
313         unnecessary overhead on Alpha CPUs.       313         unnecessary overhead on Alpha CPUs.
314                                                   314 
315         Note that the value returned by rcu_de    315         Note that the value returned by rcu_dereference() is valid
316         only within the enclosing RCU read-sid    316         only within the enclosing RCU read-side critical section [1]_.
317         For example, the following is **not**     317         For example, the following is **not** legal::
318                                                   318 
319                 rcu_read_lock();                  319                 rcu_read_lock();
320                 p = rcu_dereference(head.next)    320                 p = rcu_dereference(head.next);
321                 rcu_read_unlock();                321                 rcu_read_unlock();
322                 x = p->address; /* BUG!!! */      322                 x = p->address; /* BUG!!! */
323                 rcu_read_lock();                  323                 rcu_read_lock();
324                 y = p->data;    /* BUG!!! */      324                 y = p->data;    /* BUG!!! */
325                 rcu_read_unlock();                325                 rcu_read_unlock();
326                                                   326 
327         Holding a reference from one RCU read-    327         Holding a reference from one RCU read-side critical section
328         to another is just as illegal as holdi    328         to another is just as illegal as holding a reference from
329         one lock-based critical section to ano    329         one lock-based critical section to another!  Similarly,
330         using a reference outside of the criti    330         using a reference outside of the critical section in which
331         it was acquired is just as illegal as     331         it was acquired is just as illegal as doing so with normal
332         locking.                                  332         locking.
333                                                   333 
334         As with rcu_assign_pointer(), an impor    334         As with rcu_assign_pointer(), an important function of
335         rcu_dereference() is to document which    335         rcu_dereference() is to document which pointers are protected by
336         RCU, in particular, flagging a pointer    336         RCU, in particular, flagging a pointer that is subject to changing
337         at any time, including immediately aft    337         at any time, including immediately after the rcu_dereference().
338         And, again like rcu_assign_pointer(),     338         And, again like rcu_assign_pointer(), rcu_dereference() is
339         typically used indirectly, via the _rc    339         typically used indirectly, via the _rcu list-manipulation
340         primitives, such as list_for_each_entr    340         primitives, such as list_for_each_entry_rcu() [2]_.
341                                                   341 
342 ..      [1] The variant rcu_dereference_protec    342 ..      [1] The variant rcu_dereference_protected() can be used outside
343         of an RCU read-side critical section a    343         of an RCU read-side critical section as long as the usage is
344         protected by locks acquired by the upd    344         protected by locks acquired by the update-side code.  This variant
345         avoids the lockdep warning that would     345         avoids the lockdep warning that would happen when using (for
346         example) rcu_dereference() without rcu    346         example) rcu_dereference() without rcu_read_lock() protection.
347         Using rcu_dereference_protected() also    347         Using rcu_dereference_protected() also has the advantage
348         of permitting compiler optimizations t    348         of permitting compiler optimizations that rcu_dereference()
349         must prohibit.  The rcu_dereference_pr    349         must prohibit.  The rcu_dereference_protected() variant takes
350         a lockdep expression to indicate which    350         a lockdep expression to indicate which locks must be acquired
351         by the caller. If the indicated protec    351         by the caller. If the indicated protection is not provided,
352         a lockdep splat is emitted.  See Desig    352         a lockdep splat is emitted.  See Design/Requirements/Requirements.rst
353         and the API's code comments for more d    353         and the API's code comments for more details and example usage.
354                                                   354 
355 ..      [2] If the list_for_each_entry_rcu() i    355 ..      [2] If the list_for_each_entry_rcu() instance might be used by
356         update-side code as well as by RCU rea    356         update-side code as well as by RCU readers, then an additional
357         lockdep expression can be added to its    357         lockdep expression can be added to its list of arguments.
358         For example, given an additional "lock    358         For example, given an additional "lock_is_held(&mylock)" argument,
359         the RCU lockdep code would complain on    359         the RCU lockdep code would complain only if this instance was
360         invoked outside of an RCU read-side cr    360         invoked outside of an RCU read-side critical section and without
361         the protection of mylock.                 361         the protection of mylock.
362                                                   362 
363 The following diagram shows how each API commu    363 The following diagram shows how each API communicates among the
364 reader, updater, and reclaimer.                   364 reader, updater, and reclaimer.
365 ::                                                365 ::
366                                                   366 
367                                                   367 
368             rcu_assign_pointer()                  368             rcu_assign_pointer()
369                                     +--------+    369                                     +--------+
370             +---------------------->| reader |    370             +---------------------->| reader |---------+
371             |                       +--------+    371             |                       +--------+         |
372             |                           |         372             |                           |              |
373             |                           |         373             |                           |              | Protect:
374             |                           |         374             |                           |              | rcu_read_lock()
375             |                           |         375             |                           |              | rcu_read_unlock()
376             |        rcu_dereference()  |         376             |        rcu_dereference()  |              |
377             +---------+                 |         377             +---------+                 |              |
378             | updater |<----------------+         378             | updater |<----------------+              |
379             +---------+                           379             +---------+                                V
380             |                                     380             |                                    +-----------+
381             +---------------------------------    381             +----------------------------------->| reclaimer |
382                                                   382                                                  +-----------+
383               Defer:                              383               Defer:
384               synchronize_rcu() & call_rcu()      384               synchronize_rcu() & call_rcu()
385                                                   385 
386                                                   386 
387 The RCU infrastructure observes the temporal s    387 The RCU infrastructure observes the temporal sequence of rcu_read_lock(),
388 rcu_read_unlock(), synchronize_rcu(), and call    388 rcu_read_unlock(), synchronize_rcu(), and call_rcu() invocations in
389 order to determine when (1) synchronize_rcu()     389 order to determine when (1) synchronize_rcu() invocations may return
390 to their callers and (2) call_rcu() callbacks     390 to their callers and (2) call_rcu() callbacks may be invoked.  Efficient
391 implementations of the RCU infrastructure make    391 implementations of the RCU infrastructure make heavy use of batching in
392 order to amortize their overhead over many use    392 order to amortize their overhead over many uses of the corresponding APIs.
393 The rcu_assign_pointer() and rcu_dereference()    393 The rcu_assign_pointer() and rcu_dereference() invocations communicate
394 spatial changes via stores to and loads from t    394 spatial changes via stores to and loads from the RCU-protected pointer in
395 question.                                         395 question.
396                                                   396 
397 There are at least three flavors of RCU usage     397 There are at least three flavors of RCU usage in the Linux kernel. The diagram
398 above shows the most common one. On the update    398 above shows the most common one. On the updater side, the rcu_assign_pointer(),
399 synchronize_rcu() and call_rcu() primitives us    399 synchronize_rcu() and call_rcu() primitives used are the same for all three
400 flavors. However for protection (on the reader    400 flavors. However for protection (on the reader side), the primitives used vary
401 depending on the flavor:                          401 depending on the flavor:
402                                                   402 
403 a.      rcu_read_lock() / rcu_read_unlock()       403 a.      rcu_read_lock() / rcu_read_unlock()
404         rcu_dereference()                         404         rcu_dereference()
405                                                   405 
406 b.      rcu_read_lock_bh() / rcu_read_unlock_b    406 b.      rcu_read_lock_bh() / rcu_read_unlock_bh()
407         local_bh_disable() / local_bh_enable()    407         local_bh_disable() / local_bh_enable()
408         rcu_dereference_bh()                      408         rcu_dereference_bh()
409                                                   409 
410 c.      rcu_read_lock_sched() / rcu_read_unloc    410 c.      rcu_read_lock_sched() / rcu_read_unlock_sched()
411         preempt_disable() / preempt_enable()      411         preempt_disable() / preempt_enable()
412         local_irq_save() / local_irq_restore()    412         local_irq_save() / local_irq_restore()
413         hardirq enter / hardirq exit              413         hardirq enter / hardirq exit
414         NMI enter / NMI exit                      414         NMI enter / NMI exit
415         rcu_dereference_sched()                   415         rcu_dereference_sched()
416                                                   416 
417 These three flavors are used as follows:          417 These three flavors are used as follows:
418                                                   418 
419 a.      RCU applied to normal data structures.    419 a.      RCU applied to normal data structures.
420                                                   420 
421 b.      RCU applied to networking data structu    421 b.      RCU applied to networking data structures that may be subjected
422         to remote denial-of-service attacks.      422         to remote denial-of-service attacks.
423                                                   423 
424 c.      RCU applied to scheduler and interrupt    424 c.      RCU applied to scheduler and interrupt/NMI-handler tasks.
425                                                   425 
426 Again, most uses will be of (a).  The (b) and     426 Again, most uses will be of (a).  The (b) and (c) cases are important
427 for specialized uses, but are relatively uncom    427 for specialized uses, but are relatively uncommon.  The SRCU, RCU-Tasks,
428 RCU-Tasks-Rude, and RCU-Tasks-Trace have simil    428 RCU-Tasks-Rude, and RCU-Tasks-Trace have similar relationships among
429 their assorted primitives.                        429 their assorted primitives.
430                                                   430 
431 .. _3_whatisRCU:                                  431 .. _3_whatisRCU:
432                                                   432 
433 3.  WHAT ARE SOME EXAMPLE USES OF CORE RCU API    433 3.  WHAT ARE SOME EXAMPLE USES OF CORE RCU API?
434 ----------------------------------------------    434 -----------------------------------------------
435                                                   435 
436 This section shows a simple use of the core RC    436 This section shows a simple use of the core RCU API to protect a
437 global pointer to a dynamically allocated stru    437 global pointer to a dynamically allocated structure.  More-typical
438 uses of RCU may be found in listRCU.rst and NM    438 uses of RCU may be found in listRCU.rst and NMI-RCU.rst.
439 ::                                                439 ::
440                                                   440 
441         struct foo {                              441         struct foo {
442                 int a;                            442                 int a;
443                 char b;                           443                 char b;
444                 long c;                           444                 long c;
445         };                                        445         };
446         DEFINE_SPINLOCK(foo_mutex);               446         DEFINE_SPINLOCK(foo_mutex);
447                                                   447 
448         struct foo __rcu *gbl_foo;                448         struct foo __rcu *gbl_foo;
449                                                   449 
450         /*                                        450         /*
451          * Create a new struct foo that is the    451          * Create a new struct foo that is the same as the one currently
452          * pointed to by gbl_foo, except that     452          * pointed to by gbl_foo, except that field "a" is replaced
453          * with "new_a".  Points gbl_foo to th    453          * with "new_a".  Points gbl_foo to the new structure, and
454          * frees up the old structure after a     454          * frees up the old structure after a grace period.
455          *                                        455          *
456          * Uses rcu_assign_pointer() to ensure    456          * Uses rcu_assign_pointer() to ensure that concurrent readers
457          * see the initialized version of the     457          * see the initialized version of the new structure.
458          *                                        458          *
459          * Uses synchronize_rcu() to ensure th    459          * Uses synchronize_rcu() to ensure that any readers that might
460          * have references to the old structur    460          * have references to the old structure complete before freeing
461          * the old structure.                     461          * the old structure.
462          */                                       462          */
463         void foo_update_a(int new_a)              463         void foo_update_a(int new_a)
464         {                                         464         {
465                 struct foo *new_fp;               465                 struct foo *new_fp;
466                 struct foo *old_fp;               466                 struct foo *old_fp;
467                                                   467 
468                 new_fp = kmalloc(sizeof(*new_f    468                 new_fp = kmalloc(sizeof(*new_fp), GFP_KERNEL);
469                 spin_lock(&foo_mutex);            469                 spin_lock(&foo_mutex);
470                 old_fp = rcu_dereference_prote    470                 old_fp = rcu_dereference_protected(gbl_foo, lockdep_is_held(&foo_mutex));
471                 *new_fp = *old_fp;                471                 *new_fp = *old_fp;
472                 new_fp->a = new_a;                472                 new_fp->a = new_a;
473                 rcu_assign_pointer(gbl_foo, ne    473                 rcu_assign_pointer(gbl_foo, new_fp);
474                 spin_unlock(&foo_mutex);          474                 spin_unlock(&foo_mutex);
475                 synchronize_rcu();                475                 synchronize_rcu();
476                 kfree(old_fp);                    476                 kfree(old_fp);
477         }                                         477         }
478                                                   478 
479         /*                                        479         /*
480          * Return the value of field "a" of th    480          * Return the value of field "a" of the current gbl_foo
481          * structure.  Use rcu_read_lock() and    481          * structure.  Use rcu_read_lock() and rcu_read_unlock()
482          * to ensure that the structure does n    482          * to ensure that the structure does not get deleted out
483          * from under us, and use rcu_derefere    483          * from under us, and use rcu_dereference() to ensure that
484          * we see the initialized version of t    484          * we see the initialized version of the structure (important
485          * for DEC Alpha and for people readin    485          * for DEC Alpha and for people reading the code).
486          */                                       486          */
487         int foo_get_a(void)                       487         int foo_get_a(void)
488         {                                         488         {
489                 int retval;                       489                 int retval;
490                                                   490 
491                 rcu_read_lock();                  491                 rcu_read_lock();
492                 retval = rcu_dereference(gbl_f    492                 retval = rcu_dereference(gbl_foo)->a;
493                 rcu_read_unlock();                493                 rcu_read_unlock();
494                 return retval;                    494                 return retval;
495         }                                         495         }
496                                                   496 
497 So, to sum up:                                    497 So, to sum up:
498                                                   498 
499 -       Use rcu_read_lock() and rcu_read_unloc    499 -       Use rcu_read_lock() and rcu_read_unlock() to guard RCU
500         read-side critical sections.              500         read-side critical sections.
501                                                   501 
502 -       Within an RCU read-side critical secti    502 -       Within an RCU read-side critical section, use rcu_dereference()
503         to dereference RCU-protected pointers.    503         to dereference RCU-protected pointers.
504                                                   504 
505 -       Use some solid design (such as locks o    505 -       Use some solid design (such as locks or semaphores) to
506         keep concurrent updates from interferi    506         keep concurrent updates from interfering with each other.
507                                                   507 
508 -       Use rcu_assign_pointer() to update an     508 -       Use rcu_assign_pointer() to update an RCU-protected pointer.
509         This primitive protects concurrent rea    509         This primitive protects concurrent readers from the updater,
510         **not** concurrent updates from each o    510         **not** concurrent updates from each other!  You therefore still
511         need to use locking (or something simi    511         need to use locking (or something similar) to keep concurrent
512         rcu_assign_pointer() primitives from i    512         rcu_assign_pointer() primitives from interfering with each other.
513                                                   513 
514 -       Use synchronize_rcu() **after** removi    514 -       Use synchronize_rcu() **after** removing a data element from an
515         RCU-protected data structure, but **be    515         RCU-protected data structure, but **before** reclaiming/freeing
516         the data element, in order to wait for    516         the data element, in order to wait for the completion of all
517         RCU read-side critical sections that m    517         RCU read-side critical sections that might be referencing that
518         data item.                                518         data item.
519                                                   519 
520 See checklist.rst for additional rules to foll    520 See checklist.rst for additional rules to follow when using RCU.
521 And again, more-typical uses of RCU may be fou    521 And again, more-typical uses of RCU may be found in listRCU.rst
522 and NMI-RCU.rst.                                  522 and NMI-RCU.rst.
523                                                   523 
524 .. _4_whatisRCU:                                  524 .. _4_whatisRCU:
525                                                   525 
526 4.  WHAT IF MY UPDATING THREAD CANNOT BLOCK?      526 4.  WHAT IF MY UPDATING THREAD CANNOT BLOCK?
527 --------------------------------------------      527 --------------------------------------------
528                                                   528 
529 In the example above, foo_update_a() blocks un    529 In the example above, foo_update_a() blocks until a grace period elapses.
530 This is quite simple, but in some cases one ca    530 This is quite simple, but in some cases one cannot afford to wait so
531 long -- there might be other high-priority wor    531 long -- there might be other high-priority work to be done.
532                                                   532 
533 In such cases, one uses call_rcu() rather than    533 In such cases, one uses call_rcu() rather than synchronize_rcu().
534 The call_rcu() API is as follows::                534 The call_rcu() API is as follows::
535                                                   535 
536         void call_rcu(struct rcu_head *head, r    536         void call_rcu(struct rcu_head *head, rcu_callback_t func);
537                                                   537 
538 This function invokes func(head) after a grace    538 This function invokes func(head) after a grace period has elapsed.
539 This invocation might happen from either softi    539 This invocation might happen from either softirq or process context,
540 so the function is not permitted to block.  Th    540 so the function is not permitted to block.  The foo struct needs to
541 have an rcu_head structure added, perhaps as f    541 have an rcu_head structure added, perhaps as follows::
542                                                   542 
543         struct foo {                              543         struct foo {
544                 int a;                            544                 int a;
545                 char b;                           545                 char b;
546                 long c;                           546                 long c;
547                 struct rcu_head rcu;              547                 struct rcu_head rcu;
548         };                                        548         };
549                                                   549 
550 The foo_update_a() function might then be writ    550 The foo_update_a() function might then be written as follows::
551                                                   551 
552         /*                                        552         /*
553          * Create a new struct foo that is the    553          * Create a new struct foo that is the same as the one currently
554          * pointed to by gbl_foo, except that     554          * pointed to by gbl_foo, except that field "a" is replaced
555          * with "new_a".  Points gbl_foo to th    555          * with "new_a".  Points gbl_foo to the new structure, and
556          * frees up the old structure after a     556          * frees up the old structure after a grace period.
557          *                                        557          *
558          * Uses rcu_assign_pointer() to ensure    558          * Uses rcu_assign_pointer() to ensure that concurrent readers
559          * see the initialized version of the     559          * see the initialized version of the new structure.
560          *                                        560          *
561          * Uses call_rcu() to ensure that any     561          * Uses call_rcu() to ensure that any readers that might have
562          * references to the old structure com    562          * references to the old structure complete before freeing the
563          * old structure.                         563          * old structure.
564          */                                       564          */
565         void foo_update_a(int new_a)              565         void foo_update_a(int new_a)
566         {                                         566         {
567                 struct foo *new_fp;               567                 struct foo *new_fp;
568                 struct foo *old_fp;               568                 struct foo *old_fp;
569                                                   569 
570                 new_fp = kmalloc(sizeof(*new_f    570                 new_fp = kmalloc(sizeof(*new_fp), GFP_KERNEL);
571                 spin_lock(&foo_mutex);            571                 spin_lock(&foo_mutex);
572                 old_fp = rcu_dereference_prote    572                 old_fp = rcu_dereference_protected(gbl_foo, lockdep_is_held(&foo_mutex));
573                 *new_fp = *old_fp;                573                 *new_fp = *old_fp;
574                 new_fp->a = new_a;                574                 new_fp->a = new_a;
575                 rcu_assign_pointer(gbl_foo, ne    575                 rcu_assign_pointer(gbl_foo, new_fp);
576                 spin_unlock(&foo_mutex);          576                 spin_unlock(&foo_mutex);
577                 call_rcu(&old_fp->rcu, foo_rec    577                 call_rcu(&old_fp->rcu, foo_reclaim);
578         }                                         578         }
579                                                   579 
580 The foo_reclaim() function might appear as fol    580 The foo_reclaim() function might appear as follows::
581                                                   581 
582         void foo_reclaim(struct rcu_head *rp)     582         void foo_reclaim(struct rcu_head *rp)
583         {                                         583         {
584                 struct foo *fp = container_of(    584                 struct foo *fp = container_of(rp, struct foo, rcu);
585                                                   585 
586                 foo_cleanup(fp->a);               586                 foo_cleanup(fp->a);
587                                                   587 
588                 kfree(fp);                        588                 kfree(fp);
589         }                                         589         }
590                                                   590 
591 The container_of() primitive is a macro that,     591 The container_of() primitive is a macro that, given a pointer into a
592 struct, the type of the struct, and the pointe    592 struct, the type of the struct, and the pointed-to field within the
593 struct, returns a pointer to the beginning of     593 struct, returns a pointer to the beginning of the struct.
594                                                   594 
595 The use of call_rcu() permits the caller of fo    595 The use of call_rcu() permits the caller of foo_update_a() to
596 immediately regain control, without needing to    596 immediately regain control, without needing to worry further about the
597 old version of the newly updated element.  It     597 old version of the newly updated element.  It also clearly shows the
598 RCU distinction between updater, namely foo_up    598 RCU distinction between updater, namely foo_update_a(), and reclaimer,
599 namely foo_reclaim().                             599 namely foo_reclaim().
600                                                   600 
601 The summary of advice is the same as for the p    601 The summary of advice is the same as for the previous section, except
602 that we are now using call_rcu() rather than s    602 that we are now using call_rcu() rather than synchronize_rcu():
603                                                   603 
604 -       Use call_rcu() **after** removing a da    604 -       Use call_rcu() **after** removing a data element from an
605         RCU-protected data structure in order     605         RCU-protected data structure in order to register a callback
606         function that will be invoked after th    606         function that will be invoked after the completion of all RCU
607         read-side critical sections that might    607         read-side critical sections that might be referencing that
608         data item.                                608         data item.
609                                                   609 
610 If the callback for call_rcu() is not doing an    610 If the callback for call_rcu() is not doing anything more than calling
611 kfree() on the structure, you can use kfree_rc    611 kfree() on the structure, you can use kfree_rcu() instead of call_rcu()
612 to avoid having to write your own callback::      612 to avoid having to write your own callback::
613                                                   613 
614         kfree_rcu(old_fp, rcu);                   614         kfree_rcu(old_fp, rcu);
615                                                   615 
616 If the occasional sleep is permitted, the sing    616 If the occasional sleep is permitted, the single-argument form may
617 be used, omitting the rcu_head structure from     617 be used, omitting the rcu_head structure from struct foo.
618                                                   618 
619         kfree_rcu_mightsleep(old_fp);             619         kfree_rcu_mightsleep(old_fp);
620                                                   620 
621 This variant almost never blocks, but might do    621 This variant almost never blocks, but might do so by invoking
622 synchronize_rcu() in response to memory-alloca    622 synchronize_rcu() in response to memory-allocation failure.
623                                                   623 
624 Again, see checklist.rst for additional rules     624 Again, see checklist.rst for additional rules governing the use of RCU.
625                                                   625 
626 .. _5_whatisRCU:                                  626 .. _5_whatisRCU:
627                                                   627 
628 5.  WHAT ARE SOME SIMPLE IMPLEMENTATIONS OF RC    628 5.  WHAT ARE SOME SIMPLE IMPLEMENTATIONS OF RCU?
629 ----------------------------------------------    629 ------------------------------------------------
630                                                   630 
631 One of the nice things about RCU is that it ha    631 One of the nice things about RCU is that it has extremely simple "toy"
632 implementations that are a good first step tow    632 implementations that are a good first step towards understanding the
633 production-quality implementations in the Linu    633 production-quality implementations in the Linux kernel.  This section
634 presents two such "toy" implementations of RCU    634 presents two such "toy" implementations of RCU, one that is implemented
635 in terms of familiar locking primitives, and a    635 in terms of familiar locking primitives, and another that more closely
636 resembles "classic" RCU.  Both are way too sim    636 resembles "classic" RCU.  Both are way too simple for real-world use,
637 lacking both functionality and performance.  H    637 lacking both functionality and performance.  However, they are useful
638 in getting a feel for how RCU works.  See kern    638 in getting a feel for how RCU works.  See kernel/rcu/update.c for a
639 production-quality implementation, and see:       639 production-quality implementation, and see:
640                                                   640 
641         https://docs.google.com/document/d/1X0    641         https://docs.google.com/document/d/1X0lThx8OK0ZgLMqVoXiR4ZrGURHrXK6NyLRbeXe3Xac/edit
642                                                   642 
643 for papers describing the Linux kernel RCU imp    643 for papers describing the Linux kernel RCU implementation.  The OLS'01
644 and OLS'02 papers are a good introduction, and    644 and OLS'02 papers are a good introduction, and the dissertation provides
645 more details on the current implementation as     645 more details on the current implementation as of early 2004.
646                                                   646 
647                                                   647 
648 5A.  "TOY" IMPLEMENTATION #1: LOCKING             648 5A.  "TOY" IMPLEMENTATION #1: LOCKING
649 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^             649 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
650 This section presents a "toy" RCU implementati    650 This section presents a "toy" RCU implementation that is based on
651 familiar locking primitives.  Its overhead mak    651 familiar locking primitives.  Its overhead makes it a non-starter for
652 real-life use, as does its lack of scalability    652 real-life use, as does its lack of scalability.  It is also unsuitable
653 for realtime use, since it allows scheduling l    653 for realtime use, since it allows scheduling latency to "bleed" from
654 one read-side critical section to another.  It    654 one read-side critical section to another.  It also assumes recursive
655 reader-writer locks:  If you try this with non    655 reader-writer locks:  If you try this with non-recursive locks, and
656 you allow nested rcu_read_lock() calls, you ca    656 you allow nested rcu_read_lock() calls, you can deadlock.
657                                                   657 
658 However, it is probably the easiest implementa    658 However, it is probably the easiest implementation to relate to, so is
659 a good starting point.                            659 a good starting point.
660                                                   660 
661 It is extremely simple::                          661 It is extremely simple::
662                                                   662 
663         static DEFINE_RWLOCK(rcu_gp_mutex);       663         static DEFINE_RWLOCK(rcu_gp_mutex);
664                                                   664 
665         void rcu_read_lock(void)                  665         void rcu_read_lock(void)
666         {                                         666         {
667                 read_lock(&rcu_gp_mutex);         667                 read_lock(&rcu_gp_mutex);
668         }                                         668         }
669                                                   669 
670         void rcu_read_unlock(void)                670         void rcu_read_unlock(void)
671         {                                         671         {
672                 read_unlock(&rcu_gp_mutex);       672                 read_unlock(&rcu_gp_mutex);
673         }                                         673         }
674                                                   674 
675         void synchronize_rcu(void)                675         void synchronize_rcu(void)
676         {                                         676         {
677                 write_lock(&rcu_gp_mutex);        677                 write_lock(&rcu_gp_mutex);
678                 smp_mb__after_spinlock();         678                 smp_mb__after_spinlock();
679                 write_unlock(&rcu_gp_mutex);      679                 write_unlock(&rcu_gp_mutex);
680         }                                         680         }
681                                                   681 
682 [You can ignore rcu_assign_pointer() and rcu_d    682 [You can ignore rcu_assign_pointer() and rcu_dereference() without missing
683 much.  But here are simplified versions anyway    683 much.  But here are simplified versions anyway.  And whatever you do,
684 don't forget about them when submitting patche    684 don't forget about them when submitting patches making use of RCU!]::
685                                                   685 
686         #define rcu_assign_pointer(p, v) \        686         #define rcu_assign_pointer(p, v) \
687         ({ \                                      687         ({ \
688                 smp_store_release(&(p), (v));     688                 smp_store_release(&(p), (v)); \
689         })                                        689         })
690                                                   690 
691         #define rcu_dereference(p) \              691         #define rcu_dereference(p) \
692         ({ \                                      692         ({ \
693                 typeof(p) _________p1 = READ_O    693                 typeof(p) _________p1 = READ_ONCE(p); \
694                 (_________p1); \                  694                 (_________p1); \
695         })                                        695         })
696                                                   696 
697                                                   697 
698 The rcu_read_lock() and rcu_read_unlock() prim    698 The rcu_read_lock() and rcu_read_unlock() primitive read-acquire
699 and release a global reader-writer lock.  The     699 and release a global reader-writer lock.  The synchronize_rcu()
700 primitive write-acquires this same lock, then     700 primitive write-acquires this same lock, then releases it.  This means
701 that once synchronize_rcu() exits, all RCU rea    701 that once synchronize_rcu() exits, all RCU read-side critical sections
702 that were in progress before synchronize_rcu()    702 that were in progress before synchronize_rcu() was called are guaranteed
703 to have completed -- there is no way that sync    703 to have completed -- there is no way that synchronize_rcu() would have
704 been able to write-acquire the lock otherwise.    704 been able to write-acquire the lock otherwise.  The smp_mb__after_spinlock()
705 promotes synchronize_rcu() to a full memory ba    705 promotes synchronize_rcu() to a full memory barrier in compliance with
706 the "Memory-Barrier Guarantees" listed in:        706 the "Memory-Barrier Guarantees" listed in:
707                                                   707 
708         Design/Requirements/Requirements.rst      708         Design/Requirements/Requirements.rst
709                                                   709 
710 It is possible to nest rcu_read_lock(), since     710 It is possible to nest rcu_read_lock(), since reader-writer locks may
711 be recursively acquired.  Note also that rcu_r    711 be recursively acquired.  Note also that rcu_read_lock() is immune
712 from deadlock (an important property of RCU).     712 from deadlock (an important property of RCU).  The reason for this is
713 that the only thing that can block rcu_read_lo    713 that the only thing that can block rcu_read_lock() is a synchronize_rcu().
714 But synchronize_rcu() does not acquire any loc    714 But synchronize_rcu() does not acquire any locks while holding rcu_gp_mutex,
715 so there can be no deadlock cycle.                715 so there can be no deadlock cycle.
716                                                   716 
717 .. _quiz_1:                                       717 .. _quiz_1:
718                                                   718 
719 Quick Quiz #1:                                    719 Quick Quiz #1:
720                 Why is this argument naive?  H    720                 Why is this argument naive?  How could a deadlock
721                 occur when using this algorith    721                 occur when using this algorithm in a real-world Linux
722                 kernel?  How could this deadlo    722                 kernel?  How could this deadlock be avoided?
723                                                   723 
724 :ref:`Answers to Quick Quiz <9_whatisRCU>`        724 :ref:`Answers to Quick Quiz <9_whatisRCU>`
725                                                   725 
726 5B.  "TOY" EXAMPLE #2: CLASSIC RCU                726 5B.  "TOY" EXAMPLE #2: CLASSIC RCU
727 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                727 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
728 This section presents a "toy" RCU implementati    728 This section presents a "toy" RCU implementation that is based on
729 "classic RCU".  It is also short on performanc    729 "classic RCU".  It is also short on performance (but only for updates) and
730 on features such as hotplug CPU and the abilit    730 on features such as hotplug CPU and the ability to run in CONFIG_PREEMPTION
731 kernels.  The definitions of rcu_dereference()    731 kernels.  The definitions of rcu_dereference() and rcu_assign_pointer()
732 are the same as those shown in the preceding s    732 are the same as those shown in the preceding section, so they are omitted.
733 ::                                                733 ::
734                                                   734 
735         void rcu_read_lock(void) { }              735         void rcu_read_lock(void) { }
736                                                   736 
737         void rcu_read_unlock(void) { }            737         void rcu_read_unlock(void) { }
738                                                   738 
739         void synchronize_rcu(void)                739         void synchronize_rcu(void)
740         {                                         740         {
741                 int cpu;                          741                 int cpu;
742                                                   742 
743                 for_each_possible_cpu(cpu)        743                 for_each_possible_cpu(cpu)
744                         run_on(cpu);              744                         run_on(cpu);
745         }                                         745         }
746                                                   746 
747 Note that rcu_read_lock() and rcu_read_unlock(    747 Note that rcu_read_lock() and rcu_read_unlock() do absolutely nothing.
748 This is the great strength of classic RCU in a    748 This is the great strength of classic RCU in a non-preemptive kernel:
749 read-side overhead is precisely zero, at least    749 read-side overhead is precisely zero, at least on non-Alpha CPUs.
750 And there is absolutely no way that rcu_read_l    750 And there is absolutely no way that rcu_read_lock() can possibly
751 participate in a deadlock cycle!                  751 participate in a deadlock cycle!
752                                                   752 
753 The implementation of synchronize_rcu() simply    753 The implementation of synchronize_rcu() simply schedules itself on each
754 CPU in turn.  The run_on() primitive can be im    754 CPU in turn.  The run_on() primitive can be implemented straightforwardly
755 in terms of the sched_setaffinity() primitive.    755 in terms of the sched_setaffinity() primitive.  Of course, a somewhat less
756 "toy" implementation would restore the affinit    756 "toy" implementation would restore the affinity upon completion rather
757 than just leaving all tasks running on the las    757 than just leaving all tasks running on the last CPU, but when I said
758 "toy", I meant **toy**!                           758 "toy", I meant **toy**!
759                                                   759 
760 So how the heck is this supposed to work???       760 So how the heck is this supposed to work???
761                                                   761 
762 Remember that it is illegal to block while in     762 Remember that it is illegal to block while in an RCU read-side critical
763 section.  Therefore, if a given CPU executes a    763 section.  Therefore, if a given CPU executes a context switch, we know
764 that it must have completed all preceding RCU     764 that it must have completed all preceding RCU read-side critical sections.
765 Once **all** CPUs have executed a context swit    765 Once **all** CPUs have executed a context switch, then **all** preceding
766 RCU read-side critical sections will have comp    766 RCU read-side critical sections will have completed.
767                                                   767 
768 So, suppose that we remove a data item from it    768 So, suppose that we remove a data item from its structure and then invoke
769 synchronize_rcu().  Once synchronize_rcu() ret    769 synchronize_rcu().  Once synchronize_rcu() returns, we are guaranteed
770 that there are no RCU read-side critical secti    770 that there are no RCU read-side critical sections holding a reference
771 to that data item, so we can safely reclaim it    771 to that data item, so we can safely reclaim it.
772                                                   772 
773 .. _quiz_2:                                       773 .. _quiz_2:
774                                                   774 
775 Quick Quiz #2:                                    775 Quick Quiz #2:
776                 Give an example where Classic     776                 Give an example where Classic RCU's read-side
777                 overhead is **negative**.         777                 overhead is **negative**.
778                                                   778 
779 :ref:`Answers to Quick Quiz <9_whatisRCU>`        779 :ref:`Answers to Quick Quiz <9_whatisRCU>`
780                                                   780 
781 .. _quiz_3:                                       781 .. _quiz_3:
782                                                   782 
783 Quick Quiz #3:                                    783 Quick Quiz #3:
784                 If it is illegal to block in a    784                 If it is illegal to block in an RCU read-side
785                 critical section, what the hec    785                 critical section, what the heck do you do in
786                 CONFIG_PREEMPT_RT, where norma    786                 CONFIG_PREEMPT_RT, where normal spinlocks can block???
787                                                   787 
788 :ref:`Answers to Quick Quiz <9_whatisRCU>`        788 :ref:`Answers to Quick Quiz <9_whatisRCU>`
789                                                   789 
790 .. _6_whatisRCU:                                  790 .. _6_whatisRCU:
791                                                   791 
792 6.  ANALOGY WITH READER-WRITER LOCKING            792 6.  ANALOGY WITH READER-WRITER LOCKING
793 --------------------------------------            793 --------------------------------------
794                                                   794 
795 Although RCU can be used in many different way    795 Although RCU can be used in many different ways, a very common use of
796 RCU is analogous to reader-writer locking.  Th    796 RCU is analogous to reader-writer locking.  The following unified
797 diff shows how closely related RCU and reader-    797 diff shows how closely related RCU and reader-writer locking can be.
798 ::                                                798 ::
799                                                   799 
800         @@ -5,5 +5,5 @@ struct el {               800         @@ -5,5 +5,5 @@ struct el {
801                 int data;                         801                 int data;
802                 /* Other data fields */           802                 /* Other data fields */
803          };                                       803          };
804         -rwlock_t listmutex;                      804         -rwlock_t listmutex;
805         +spinlock_t listmutex;                    805         +spinlock_t listmutex;
806          struct el head;                          806          struct el head;
807                                                   807 
808         @@ -13,15 +14,15 @@                       808         @@ -13,15 +14,15 @@
809                 struct list_head *lp;             809                 struct list_head *lp;
810                 struct el *p;                     810                 struct el *p;
811                                                   811 
812         -       read_lock(&listmutex);            812         -       read_lock(&listmutex);
813         -       list_for_each_entry(p, head, l    813         -       list_for_each_entry(p, head, lp) {
814         +       rcu_read_lock();                  814         +       rcu_read_lock();
815         +       list_for_each_entry_rcu(p, hea    815         +       list_for_each_entry_rcu(p, head, lp) {
816                         if (p->key == key) {      816                         if (p->key == key) {
817                                 *result = p->d    817                                 *result = p->data;
818         -                       read_unlock(&l    818         -                       read_unlock(&listmutex);
819         +                       rcu_read_unloc    819         +                       rcu_read_unlock();
820                                 return 1;         820                                 return 1;
821                         }                         821                         }
822                 }                                 822                 }
823         -       read_unlock(&listmutex);          823         -       read_unlock(&listmutex);
824         +       rcu_read_unlock();                824         +       rcu_read_unlock();
825                 return 0;                         825                 return 0;
826          }                                        826          }
827                                                   827 
828         @@ -29,15 +30,16 @@                       828         @@ -29,15 +30,16 @@
829          {                                        829          {
830                 struct el *p;                     830                 struct el *p;
831                                                   831 
832         -       write_lock(&listmutex);           832         -       write_lock(&listmutex);
833         +       spin_lock(&listmutex);            833         +       spin_lock(&listmutex);
834                 list_for_each_entry(p, head, l    834                 list_for_each_entry(p, head, lp) {
835                         if (p->key == key) {      835                         if (p->key == key) {
836         -                       list_del(&p->l    836         -                       list_del(&p->list);
837         -                       write_unlock(&    837         -                       write_unlock(&listmutex);
838         +                       list_del_rcu(&    838         +                       list_del_rcu(&p->list);
839         +                       spin_unlock(&l    839         +                       spin_unlock(&listmutex);
840         +                       synchronize_rc    840         +                       synchronize_rcu();
841                                 kfree(p);         841                                 kfree(p);
842                                 return 1;         842                                 return 1;
843                         }                         843                         }
844                 }                                 844                 }
845         -       write_unlock(&listmutex);         845         -       write_unlock(&listmutex);
846         +       spin_unlock(&listmutex);          846         +       spin_unlock(&listmutex);
847                 return 0;                         847                 return 0;
848          }                                        848          }
849                                                   849 
850 Or, for those who prefer a side-by-side listin    850 Or, for those who prefer a side-by-side listing::
851                                                   851 
852  1 struct el {                          1 stru    852  1 struct el {                          1 struct el {
853  2   struct list_head list;             2   st    853  2   struct list_head list;             2   struct list_head list;
854  3   long key;                          3   lo    854  3   long key;                          3   long key;
855  4   spinlock_t mutex;                  4   sp    855  4   spinlock_t mutex;                  4   spinlock_t mutex;
856  5   int data;                          5   in    856  5   int data;                          5   int data;
857  6   /* Other data fields */            6   /*    857  6   /* Other data fields */            6   /* Other data fields */
858  7 };                                   7 };      858  7 };                                   7 };
859  8 rwlock_t listmutex;                  8 spin    859  8 rwlock_t listmutex;                  8 spinlock_t listmutex;
860  9 struct el head;                      9 stru    860  9 struct el head;                      9 struct el head;
861                                                   861 
862 ::                                                862 ::
863                                                   863 
864   1 int search(long key, int *result)    1 int    864   1 int search(long key, int *result)    1 int search(long key, int *result)
865   2 {                                    2 {      865   2 {                                    2 {
866   3   struct list_head *lp;              3   s    866   3   struct list_head *lp;              3   struct list_head *lp;
867   4   struct el *p;                      4   s    867   4   struct el *p;                      4   struct el *p;
868   5                                      5        868   5                                      5
869   6   read_lock(&listmutex);             6   r    869   6   read_lock(&listmutex);             6   rcu_read_lock();
870   7   list_for_each_entry(p, head, lp) { 7   l    870   7   list_for_each_entry(p, head, lp) { 7   list_for_each_entry_rcu(p, head, lp) {
871   8     if (p->key == key) {             8        871   8     if (p->key == key) {             8     if (p->key == key) {
872   9       *result = p->data;             9        872   9       *result = p->data;             9       *result = p->data;
873  10       read_unlock(&listmutex);      10        873  10       read_unlock(&listmutex);      10       rcu_read_unlock();
874  11       return 1;                     11        874  11       return 1;                     11       return 1;
875  12     }                               12        875  12     }                               12     }
876  13   }                                 13   }    876  13   }                                 13   }
877  14   read_unlock(&listmutex);          14   r    877  14   read_unlock(&listmutex);          14   rcu_read_unlock();
878  15   return 0;                         15   r    878  15   return 0;                         15   return 0;
879  16 }                                   16 }      879  16 }                                   16 }
880                                                   880 
881 ::                                                881 ::
882                                                   882 
883   1 int delete(long key)                 1 int    883   1 int delete(long key)                 1 int delete(long key)
884   2 {                                    2 {      884   2 {                                    2 {
885   3   struct el *p;                      3   s    885   3   struct el *p;                      3   struct el *p;
886   4                                      4        886   4                                      4
887   5   write_lock(&listmutex);            5   s    887   5   write_lock(&listmutex);            5   spin_lock(&listmutex);
888   6   list_for_each_entry(p, head, lp) { 6   l    888   6   list_for_each_entry(p, head, lp) { 6   list_for_each_entry(p, head, lp) {
889   7     if (p->key == key) {             7        889   7     if (p->key == key) {             7     if (p->key == key) {
890   8       list_del(&p->list);            8        890   8       list_del(&p->list);            8       list_del_rcu(&p->list);
891   9       write_unlock(&listmutex);      9        891   9       write_unlock(&listmutex);      9       spin_unlock(&listmutex);
892                                         10        892                                         10       synchronize_rcu();
893  10       kfree(p);                     11        893  10       kfree(p);                     11       kfree(p);
894  11       return 1;                     12        894  11       return 1;                     12       return 1;
895  12     }                               13        895  12     }                               13     }
896  13   }                                 14   }    896  13   }                                 14   }
897  14   write_unlock(&listmutex);         15   s    897  14   write_unlock(&listmutex);         15   spin_unlock(&listmutex);
898  15   return 0;                         16   r    898  15   return 0;                         16   return 0;
899  16 }                                   17 }      899  16 }                                   17 }
900                                                   900 
901 Either way, the differences are quite small.      901 Either way, the differences are quite small.  Read-side locking moves
902 to rcu_read_lock() and rcu_read_unlock, update    902 to rcu_read_lock() and rcu_read_unlock, update-side locking moves from
903 a reader-writer lock to a simple spinlock, and    903 a reader-writer lock to a simple spinlock, and a synchronize_rcu()
904 precedes the kfree().                             904 precedes the kfree().
905                                                   905 
906 However, there is one potential catch: the rea    906 However, there is one potential catch: the read-side and update-side
907 critical sections can now run concurrently.  I    907 critical sections can now run concurrently.  In many cases, this will
908 not be a problem, but it is necessary to check    908 not be a problem, but it is necessary to check carefully regardless.
909 For example, if multiple independent list upda    909 For example, if multiple independent list updates must be seen as
910 a single atomic update, converting to RCU will    910 a single atomic update, converting to RCU will require special care.
911                                                   911 
912 Also, the presence of synchronize_rcu() means     912 Also, the presence of synchronize_rcu() means that the RCU version of
913 delete() can now block.  If this is a problem,    913 delete() can now block.  If this is a problem, there is a callback-based
914 mechanism that never blocks, namely call_rcu()    914 mechanism that never blocks, namely call_rcu() or kfree_rcu(), that can
915 be used in place of synchronize_rcu().            915 be used in place of synchronize_rcu().
916                                                   916 
917 .. _7_whatisRCU:                                  917 .. _7_whatisRCU:
918                                                   918 
919 7.  ANALOGY WITH REFERENCE COUNTING               919 7.  ANALOGY WITH REFERENCE COUNTING
920 -----------------------------------               920 -----------------------------------
921                                                   921 
922 The reader-writer analogy (illustrated by the     922 The reader-writer analogy (illustrated by the previous section) is not
923 always the best way to think about using RCU.     923 always the best way to think about using RCU.  Another helpful analogy
924 considers RCU an effective reference count on     924 considers RCU an effective reference count on everything which is
925 protected by RCU.                                 925 protected by RCU.
926                                                   926 
927 A reference count typically does not prevent t    927 A reference count typically does not prevent the referenced object's
928 values from changing, but does prevent changes    928 values from changing, but does prevent changes to type -- particularly the
929 gross change of type that happens when that ob    929 gross change of type that happens when that object's memory is freed and
930 re-allocated for some other purpose.  Once a t    930 re-allocated for some other purpose.  Once a type-safe reference to the
931 object is obtained, some other mechanism is ne    931 object is obtained, some other mechanism is needed to ensure consistent
932 access to the data in the object.  This could     932 access to the data in the object.  This could involve taking a spinlock,
933 but with RCU the typical approach is to perfor    933 but with RCU the typical approach is to perform reads with SMP-aware
934 operations such as smp_load_acquire(), to perf    934 operations such as smp_load_acquire(), to perform updates with atomic
935 read-modify-write operations, and to provide t    935 read-modify-write operations, and to provide the necessary ordering.
936 RCU provides a number of support functions tha    936 RCU provides a number of support functions that embed the required
937 operations and ordering, such as the list_for_    937 operations and ordering, such as the list_for_each_entry_rcu() macro
938 used in the previous section.                     938 used in the previous section.
939                                                   939 
940 A more focused view of the reference counting     940 A more focused view of the reference counting behavior is that,
941 between rcu_read_lock() and rcu_read_unlock(),    941 between rcu_read_lock() and rcu_read_unlock(), any reference taken with
942 rcu_dereference() on a pointer marked as ``__r    942 rcu_dereference() on a pointer marked as ``__rcu`` can be treated as
943 though a reference-count on that object has be    943 though a reference-count on that object has been temporarily increased.
944 This prevents the object from changing type.      944 This prevents the object from changing type.  Exactly what this means
945 will depend on normal expectations of objects     945 will depend on normal expectations of objects of that type, but it
946 typically includes that spinlocks can still be    946 typically includes that spinlocks can still be safely locked, normal
947 reference counters can be safely manipulated,     947 reference counters can be safely manipulated, and ``__rcu`` pointers
948 can be safely dereferenced.                       948 can be safely dereferenced.
949                                                   949 
950 Some operations that one might expect to see o    950 Some operations that one might expect to see on an object for
951 which an RCU reference is held include:           951 which an RCU reference is held include:
952                                                   952 
953  - Copying out data that is guaranteed to be s    953  - Copying out data that is guaranteed to be stable by the object's type.
954  - Using kref_get_unless_zero() or similar to     954  - Using kref_get_unless_zero() or similar to get a longer-term
955    reference.  This may fail of course.           955    reference.  This may fail of course.
956  - Acquiring a spinlock in the object, and che    956  - Acquiring a spinlock in the object, and checking if the object still
957    is the expected object and if so, manipulat    957    is the expected object and if so, manipulating it freely.
958                                                   958 
959 The understanding that RCU provides a referenc    959 The understanding that RCU provides a reference that only prevents a
960 change of type is particularly visible with ob    960 change of type is particularly visible with objects allocated from a
961 slab cache marked ``SLAB_TYPESAFE_BY_RCU``.  R    961 slab cache marked ``SLAB_TYPESAFE_BY_RCU``.  RCU operations may yield a
962 reference to an object from such a cache that     962 reference to an object from such a cache that has been concurrently freed
963 and the memory reallocated to a completely dif    963 and the memory reallocated to a completely different object, though of
964 the same type.  In this case RCU doesn't even     964 the same type.  In this case RCU doesn't even protect the identity of the
965 object from changing, only its type.  So the o    965 object from changing, only its type.  So the object found may not be the
966 one expected, but it will be one where it is s    966 one expected, but it will be one where it is safe to take a reference
967 (and then potentially acquiring a spinlock), a    967 (and then potentially acquiring a spinlock), allowing subsequent code
968 to check whether the identity matches expectat    968 to check whether the identity matches expectations.  It is tempting
969 to simply acquire the spinlock without first t    969 to simply acquire the spinlock without first taking the reference, but
970 unfortunately any spinlock in a ``SLAB_TYPESAF    970 unfortunately any spinlock in a ``SLAB_TYPESAFE_BY_RCU`` object must be
971 initialized after each and every call to kmem_    971 initialized after each and every call to kmem_cache_alloc(), which renders
972 reference-free spinlock acquisition completely    972 reference-free spinlock acquisition completely unsafe.  Therefore, when
973 using ``SLAB_TYPESAFE_BY_RCU``, make proper us    973 using ``SLAB_TYPESAFE_BY_RCU``, make proper use of a reference counter.
974 (Those willing to initialize their locks in a     974 (Those willing to initialize their locks in a kmem_cache constructor
975 may also use locking, including cache-friendly    975 may also use locking, including cache-friendly sequence locking.)
976                                                   976 
977 With traditional reference counting -- such as    977 With traditional reference counting -- such as that implemented by the
978 kref library in Linux -- there is typically co    978 kref library in Linux -- there is typically code that runs when the last
979 reference to an object is dropped.  With kref,    979 reference to an object is dropped.  With kref, this is the function
980 passed to kref_put().  When RCU is being used,    980 passed to kref_put().  When RCU is being used, such finalization code
981 must not be run until all ``__rcu`` pointers r    981 must not be run until all ``__rcu`` pointers referencing the object have
982 been updated, and then a grace period has pass    982 been updated, and then a grace period has passed.  Every remaining
983 globally visible pointer to the object must be    983 globally visible pointer to the object must be considered to be a
984 potential counted reference, and the finalizat    984 potential counted reference, and the finalization code is typically run
985 using call_rcu() only after all those pointers    985 using call_rcu() only after all those pointers have been changed.
986                                                   986 
987 To see how to choose between these two analogi    987 To see how to choose between these two analogies -- of RCU as a
988 reader-writer lock and RCU as a reference coun    988 reader-writer lock and RCU as a reference counting system -- it is useful
989 to reflect on the scale of the thing being pro    989 to reflect on the scale of the thing being protected.  The reader-writer
990 lock analogy looks at larger multi-part object    990 lock analogy looks at larger multi-part objects such as a linked list
991 and shows how RCU can facilitate concurrency w    991 and shows how RCU can facilitate concurrency while elements are added
992 to, and removed from, the list.  The reference    992 to, and removed from, the list.  The reference-count analogy looks at
993 the individual objects and looks at how they c    993 the individual objects and looks at how they can be accessed safely
994 within whatever whole they are a part of.         994 within whatever whole they are a part of.
995                                                   995 
996 .. _8_whatisRCU:                                  996 .. _8_whatisRCU:
997                                                   997 
998 8.  FULL LIST OF RCU APIs                         998 8.  FULL LIST OF RCU APIs
999 -------------------------                         999 -------------------------
1000                                                  1000 
1001 The RCU APIs are documented in docbook-format    1001 The RCU APIs are documented in docbook-format header comments in the
1002 Linux-kernel source code, but it helps to hav    1002 Linux-kernel source code, but it helps to have a full list of the
1003 APIs, since there does not appear to be a way    1003 APIs, since there does not appear to be a way to categorize them
1004 in docbook.  Here is the list, by category.      1004 in docbook.  Here is the list, by category.
1005                                                  1005 
1006 RCU list traversal::                             1006 RCU list traversal::
1007                                                  1007 
1008         list_entry_rcu                           1008         list_entry_rcu
1009         list_entry_lockless                      1009         list_entry_lockless
1010         list_first_entry_rcu                     1010         list_first_entry_rcu
1011         list_next_rcu                            1011         list_next_rcu
1012         list_for_each_entry_rcu                  1012         list_for_each_entry_rcu
1013         list_for_each_entry_continue_rcu         1013         list_for_each_entry_continue_rcu
1014         list_for_each_entry_from_rcu             1014         list_for_each_entry_from_rcu
1015         list_first_or_null_rcu                   1015         list_first_or_null_rcu
1016         list_next_or_null_rcu                    1016         list_next_or_null_rcu
1017         hlist_first_rcu                          1017         hlist_first_rcu
1018         hlist_next_rcu                           1018         hlist_next_rcu
1019         hlist_pprev_rcu                          1019         hlist_pprev_rcu
1020         hlist_for_each_entry_rcu                 1020         hlist_for_each_entry_rcu
1021         hlist_for_each_entry_rcu_bh              1021         hlist_for_each_entry_rcu_bh
1022         hlist_for_each_entry_from_rcu            1022         hlist_for_each_entry_from_rcu
1023         hlist_for_each_entry_continue_rcu        1023         hlist_for_each_entry_continue_rcu
1024         hlist_for_each_entry_continue_rcu_bh     1024         hlist_for_each_entry_continue_rcu_bh
1025         hlist_nulls_first_rcu                    1025         hlist_nulls_first_rcu
1026         hlist_nulls_for_each_entry_rcu           1026         hlist_nulls_for_each_entry_rcu
1027         hlist_bl_first_rcu                       1027         hlist_bl_first_rcu
1028         hlist_bl_for_each_entry_rcu              1028         hlist_bl_for_each_entry_rcu
1029                                                  1029 
1030 RCU pointer/list update::                        1030 RCU pointer/list update::
1031                                                  1031 
1032         rcu_assign_pointer                       1032         rcu_assign_pointer
1033         list_add_rcu                             1033         list_add_rcu
1034         list_add_tail_rcu                        1034         list_add_tail_rcu
1035         list_del_rcu                             1035         list_del_rcu
1036         list_replace_rcu                         1036         list_replace_rcu
1037         hlist_add_behind_rcu                     1037         hlist_add_behind_rcu
1038         hlist_add_before_rcu                     1038         hlist_add_before_rcu
1039         hlist_add_head_rcu                       1039         hlist_add_head_rcu
1040         hlist_add_tail_rcu                       1040         hlist_add_tail_rcu
1041         hlist_del_rcu                            1041         hlist_del_rcu
1042         hlist_del_init_rcu                       1042         hlist_del_init_rcu
1043         hlist_replace_rcu                        1043         hlist_replace_rcu
1044         list_splice_init_rcu                     1044         list_splice_init_rcu
1045         list_splice_tail_init_rcu                1045         list_splice_tail_init_rcu
1046         hlist_nulls_del_init_rcu                 1046         hlist_nulls_del_init_rcu
1047         hlist_nulls_del_rcu                      1047         hlist_nulls_del_rcu
1048         hlist_nulls_add_head_rcu                 1048         hlist_nulls_add_head_rcu
1049         hlist_bl_add_head_rcu                    1049         hlist_bl_add_head_rcu
1050         hlist_bl_del_init_rcu                    1050         hlist_bl_del_init_rcu
1051         hlist_bl_del_rcu                         1051         hlist_bl_del_rcu
1052         hlist_bl_set_first_rcu                   1052         hlist_bl_set_first_rcu
1053                                                  1053 
1054 RCU::                                            1054 RCU::
1055                                                  1055 
1056         Critical sections       Grace period     1056         Critical sections       Grace period            Barrier
1057                                                  1057 
1058         rcu_read_lock           synchronize_n    1058         rcu_read_lock           synchronize_net         rcu_barrier
1059         rcu_read_unlock         synchronize_r    1059         rcu_read_unlock         synchronize_rcu
1060         rcu_dereference         synchronize_r    1060         rcu_dereference         synchronize_rcu_expedited
1061         rcu_read_lock_held      call_rcu         1061         rcu_read_lock_held      call_rcu
1062         rcu_dereference_check   kfree_rcu        1062         rcu_dereference_check   kfree_rcu
1063         rcu_dereference_protected                1063         rcu_dereference_protected
1064                                                  1064 
1065 bh::                                             1065 bh::
1066                                                  1066 
1067         Critical sections       Grace period     1067         Critical sections       Grace period            Barrier
1068                                                  1068 
1069         rcu_read_lock_bh        call_rcu         1069         rcu_read_lock_bh        call_rcu                rcu_barrier
1070         rcu_read_unlock_bh      synchronize_r    1070         rcu_read_unlock_bh      synchronize_rcu
1071         [local_bh_disable]      synchronize_r    1071         [local_bh_disable]      synchronize_rcu_expedited
1072         [and friends]                            1072         [and friends]
1073         rcu_dereference_bh                       1073         rcu_dereference_bh
1074         rcu_dereference_bh_check                 1074         rcu_dereference_bh_check
1075         rcu_dereference_bh_protected             1075         rcu_dereference_bh_protected
1076         rcu_read_lock_bh_held                    1076         rcu_read_lock_bh_held
1077                                                  1077 
1078 sched::                                          1078 sched::
1079                                                  1079 
1080         Critical sections       Grace period     1080         Critical sections       Grace period            Barrier
1081                                                  1081 
1082         rcu_read_lock_sched     call_rcu         1082         rcu_read_lock_sched     call_rcu                rcu_barrier
1083         rcu_read_unlock_sched   synchronize_r    1083         rcu_read_unlock_sched   synchronize_rcu
1084         [preempt_disable]       synchronize_r    1084         [preempt_disable]       synchronize_rcu_expedited
1085         [and friends]                            1085         [and friends]
1086         rcu_read_lock_sched_notrace              1086         rcu_read_lock_sched_notrace
1087         rcu_read_unlock_sched_notrace            1087         rcu_read_unlock_sched_notrace
1088         rcu_dereference_sched                    1088         rcu_dereference_sched
1089         rcu_dereference_sched_check              1089         rcu_dereference_sched_check
1090         rcu_dereference_sched_protected          1090         rcu_dereference_sched_protected
1091         rcu_read_lock_sched_held                 1091         rcu_read_lock_sched_held
1092                                                  1092 
1093                                                  1093 
1094 RCU-Tasks::                                      1094 RCU-Tasks::
1095                                                  1095 
1096         Critical sections       Grace period     1096         Critical sections       Grace period            Barrier
1097                                                  1097 
1098         N/A                     call_rcu_task    1098         N/A                     call_rcu_tasks          rcu_barrier_tasks
1099                                 synchronize_r    1099                                 synchronize_rcu_tasks
1100                                                  1100 
1101                                                  1101 
1102 RCU-Tasks-Rude::                                 1102 RCU-Tasks-Rude::
1103                                                  1103 
1104         Critical sections       Grace period     1104         Critical sections       Grace period            Barrier
1105                                                  1105 
1106         N/A                     call_rcu_task    1106         N/A                     call_rcu_tasks_rude     rcu_barrier_tasks_rude
1107                                 synchronize_r    1107                                 synchronize_rcu_tasks_rude
1108                                                  1108 
1109                                                  1109 
1110 RCU-Tasks-Trace::                                1110 RCU-Tasks-Trace::
1111                                                  1111 
1112         Critical sections       Grace period     1112         Critical sections       Grace period            Barrier
1113                                                  1113 
1114         rcu_read_lock_trace     call_rcu_task    1114         rcu_read_lock_trace     call_rcu_tasks_trace    rcu_barrier_tasks_trace
1115         rcu_read_unlock_trace   synchronize_r    1115         rcu_read_unlock_trace   synchronize_rcu_tasks_trace
1116                                                  1116 
1117                                                  1117 
1118 SRCU::                                           1118 SRCU::
1119                                                  1119 
1120         Critical sections       Grace period     1120         Critical sections       Grace period            Barrier
1121                                                  1121 
1122         srcu_read_lock          call_srcu        1122         srcu_read_lock          call_srcu               srcu_barrier
1123         srcu_read_unlock        synchronize_s    1123         srcu_read_unlock        synchronize_srcu
1124         srcu_dereference        synchronize_s    1124         srcu_dereference        synchronize_srcu_expedited
1125         srcu_dereference_check                   1125         srcu_dereference_check
1126         srcu_read_lock_held                      1126         srcu_read_lock_held
1127                                                  1127 
1128 SRCU: Initialization/cleanup::                   1128 SRCU: Initialization/cleanup::
1129                                                  1129 
1130         DEFINE_SRCU                              1130         DEFINE_SRCU
1131         DEFINE_STATIC_SRCU                       1131         DEFINE_STATIC_SRCU
1132         init_srcu_struct                         1132         init_srcu_struct
1133         cleanup_srcu_struct                      1133         cleanup_srcu_struct
1134                                                  1134 
1135 All: lockdep-checked RCU utility APIs::          1135 All: lockdep-checked RCU utility APIs::
1136                                                  1136 
1137         RCU_LOCKDEP_WARN                         1137         RCU_LOCKDEP_WARN
1138         rcu_sleep_check                          1138         rcu_sleep_check
1139                                                  1139 
1140 All: Unchecked RCU-protected pointer access::    1140 All: Unchecked RCU-protected pointer access::
1141                                                  1141 
1142         rcu_dereference_raw                      1142         rcu_dereference_raw
1143                                                  1143 
1144 All: Unchecked RCU-protected pointer access w    1144 All: Unchecked RCU-protected pointer access with dereferencing prohibited::
1145                                                  1145 
1146         rcu_access_pointer                       1146         rcu_access_pointer
1147                                                  1147 
1148 See the comment headers in the source code (o    1148 See the comment headers in the source code (or the docbook generated
1149 from them) for more information.                 1149 from them) for more information.
1150                                                  1150 
1151 However, given that there are no fewer than f    1151 However, given that there are no fewer than four families of RCU APIs
1152 in the Linux kernel, how do you choose which     1152 in the Linux kernel, how do you choose which one to use?  The following
1153 list can be helpful:                             1153 list can be helpful:
1154                                                  1154 
1155 a.      Will readers need to block?  If so, y    1155 a.      Will readers need to block?  If so, you need SRCU.
1156                                                  1156 
1157 b.      Will readers need to block and are yo    1157 b.      Will readers need to block and are you doing tracing, for
1158         example, ftrace or BPF?  If so, you n    1158         example, ftrace or BPF?  If so, you need RCU-tasks,
1159         RCU-tasks-rude, and/or RCU-tasks-trac    1159         RCU-tasks-rude, and/or RCU-tasks-trace.
1160                                                  1160 
1161 c.      What about the -rt patchset?  If read    1161 c.      What about the -rt patchset?  If readers would need to block in
1162         an non-rt kernel, you need SRCU.  If     1162         an non-rt kernel, you need SRCU.  If readers would block when
1163         acquiring spinlocks in a -rt kernel,     1163         acquiring spinlocks in a -rt kernel, but not in a non-rt kernel,
1164         SRCU is not necessary.  (The -rt patc    1164         SRCU is not necessary.  (The -rt patchset turns spinlocks into
1165         sleeplocks, hence this distinction.)     1165         sleeplocks, hence this distinction.)
1166                                                  1166 
1167 d.      Do you need to treat NMI handlers, ha    1167 d.      Do you need to treat NMI handlers, hardirq handlers,
1168         and code segments with preemption dis    1168         and code segments with preemption disabled (whether
1169         via preempt_disable(), local_irq_save    1169         via preempt_disable(), local_irq_save(), local_bh_disable(),
1170         or some other mechanism) as if they w    1170         or some other mechanism) as if they were explicit RCU readers?
1171         If so, RCU-sched readers are the only    1171         If so, RCU-sched readers are the only choice that will work
1172         for you, but since about v4.20 you us    1172         for you, but since about v4.20 you use can use the vanilla RCU
1173         update primitives.                       1173         update primitives.
1174                                                  1174 
1175 e.      Do you need RCU grace periods to comp    1175 e.      Do you need RCU grace periods to complete even in the face of
1176         softirq monopolization of one or more    1176         softirq monopolization of one or more of the CPUs?  For example,
1177         is your code subject to network-based    1177         is your code subject to network-based denial-of-service attacks?
1178         If so, you should disable softirq acr    1178         If so, you should disable softirq across your readers, for
1179         example, by using rcu_read_lock_bh().    1179         example, by using rcu_read_lock_bh().  Since about v4.20 you
1180         use can use the vanilla RCU update pr    1180         use can use the vanilla RCU update primitives.
1181                                                  1181 
1182 f.      Is your workload too update-intensive    1182 f.      Is your workload too update-intensive for normal use of
1183         RCU, but inappropriate for other sync    1183         RCU, but inappropriate for other synchronization mechanisms?
1184         If so, consider SLAB_TYPESAFE_BY_RCU     1184         If so, consider SLAB_TYPESAFE_BY_RCU (which was originally
1185         named SLAB_DESTROY_BY_RCU).  But plea    1185         named SLAB_DESTROY_BY_RCU).  But please be careful!
1186                                                  1186 
1187 g.      Do you need read-side critical sectio    1187 g.      Do you need read-side critical sections that are respected even
1188         on CPUs that are deep in the idle loo    1188         on CPUs that are deep in the idle loop, during entry to or exit
1189         from user-mode execution, or on an of    1189         from user-mode execution, or on an offlined CPU?  If so, SRCU
1190         and RCU Tasks Trace are the only choi    1190         and RCU Tasks Trace are the only choices that will work for you,
1191         with SRCU being strongly preferred in    1191         with SRCU being strongly preferred in almost all cases.
1192                                                  1192 
1193 h.      Otherwise, use RCU.                      1193 h.      Otherwise, use RCU.
1194                                                  1194 
1195 Of course, this all assumes that you have det    1195 Of course, this all assumes that you have determined that RCU is in fact
1196 the right tool for your job.                     1196 the right tool for your job.
1197                                                  1197 
1198 .. _9_whatisRCU:                                 1198 .. _9_whatisRCU:
1199                                                  1199 
1200 9.  ANSWERS TO QUICK QUIZZES                     1200 9.  ANSWERS TO QUICK QUIZZES
1201 ----------------------------                     1201 ----------------------------
1202                                                  1202 
1203 Quick Quiz #1:                                   1203 Quick Quiz #1:
1204                 Why is this argument naive?      1204                 Why is this argument naive?  How could a deadlock
1205                 occur when using this algorit    1205                 occur when using this algorithm in a real-world Linux
1206                 kernel?  [Referring to the lo    1206                 kernel?  [Referring to the lock-based "toy" RCU
1207                 algorithm.]                      1207                 algorithm.]
1208                                                  1208 
1209 Answer:                                          1209 Answer:
1210                 Consider the following sequen    1210                 Consider the following sequence of events:
1211                                                  1211 
1212                 1.      CPU 0 acquires some u    1212                 1.      CPU 0 acquires some unrelated lock, call it
1213                         "problematic_lock", d    1213                         "problematic_lock", disabling irq via
1214                         spin_lock_irqsave().     1214                         spin_lock_irqsave().
1215                                                  1215 
1216                 2.      CPU 1 enters synchron    1216                 2.      CPU 1 enters synchronize_rcu(), write-acquiring
1217                         rcu_gp_mutex.            1217                         rcu_gp_mutex.
1218                                                  1218 
1219                 3.      CPU 0 enters rcu_read    1219                 3.      CPU 0 enters rcu_read_lock(), but must wait
1220                         because CPU 1 holds r    1220                         because CPU 1 holds rcu_gp_mutex.
1221                                                  1221 
1222                 4.      CPU 1 is interrupted,    1222                 4.      CPU 1 is interrupted, and the irq handler
1223                         attempts to acquire p    1223                         attempts to acquire problematic_lock.
1224                                                  1224 
1225                 The system is now deadlocked.    1225                 The system is now deadlocked.
1226                                                  1226 
1227                 One way to avoid this deadloc    1227                 One way to avoid this deadlock is to use an approach like
1228                 that of CONFIG_PREEMPT_RT, wh    1228                 that of CONFIG_PREEMPT_RT, where all normal spinlocks
1229                 become blocking locks, and al    1229                 become blocking locks, and all irq handlers execute in
1230                 the context of special tasks.    1230                 the context of special tasks.  In this case, in step 4
1231                 above, the irq handler would     1231                 above, the irq handler would block, allowing CPU 1 to
1232                 release rcu_gp_mutex, avoidin    1232                 release rcu_gp_mutex, avoiding the deadlock.
1233                                                  1233 
1234                 Even in the absence of deadlo    1234                 Even in the absence of deadlock, this RCU implementation
1235                 allows latency to "bleed" fro    1235                 allows latency to "bleed" from readers to other
1236                 readers through synchronize_r    1236                 readers through synchronize_rcu().  To see this,
1237                 consider task A in an RCU rea    1237                 consider task A in an RCU read-side critical section
1238                 (thus read-holding rcu_gp_mut    1238                 (thus read-holding rcu_gp_mutex), task B blocked
1239                 attempting to write-acquire r    1239                 attempting to write-acquire rcu_gp_mutex, and
1240                 task C blocked in rcu_read_lo    1240                 task C blocked in rcu_read_lock() attempting to
1241                 read_acquire rcu_gp_mutex.  T    1241                 read_acquire rcu_gp_mutex.  Task A's RCU read-side
1242                 latency is holding up task C,    1242                 latency is holding up task C, albeit indirectly via
1243                 task B.                          1243                 task B.
1244                                                  1244 
1245                 Realtime RCU implementations     1245                 Realtime RCU implementations therefore use a counter-based
1246                 approach where tasks in RCU r    1246                 approach where tasks in RCU read-side critical sections
1247                 cannot be blocked by tasks ex    1247                 cannot be blocked by tasks executing synchronize_rcu().
1248                                                  1248 
1249 :ref:`Back to Quick Quiz #1 <quiz_1>`            1249 :ref:`Back to Quick Quiz #1 <quiz_1>`
1250                                                  1250 
1251 Quick Quiz #2:                                   1251 Quick Quiz #2:
1252                 Give an example where Classic    1252                 Give an example where Classic RCU's read-side
1253                 overhead is **negative**.        1253                 overhead is **negative**.
1254                                                  1254 
1255 Answer:                                          1255 Answer:
1256                 Imagine a single-CPU system w    1256                 Imagine a single-CPU system with a non-CONFIG_PREEMPTION
1257                 kernel where a routing table     1257                 kernel where a routing table is used by process-context
1258                 code, but can be updated by i    1258                 code, but can be updated by irq-context code (for example,
1259                 by an "ICMP REDIRECT" packet)    1259                 by an "ICMP REDIRECT" packet).  The usual way of handling
1260                 this would be to have the pro    1260                 this would be to have the process-context code disable
1261                 interrupts while searching th    1261                 interrupts while searching the routing table.  Use of
1262                 RCU allows such interrupt-dis    1262                 RCU allows such interrupt-disabling to be dispensed with.
1263                 Thus, without RCU, you pay th    1263                 Thus, without RCU, you pay the cost of disabling interrupts,
1264                 and with RCU you don't.          1264                 and with RCU you don't.
1265                                                  1265 
1266                 One can argue that the overhe    1266                 One can argue that the overhead of RCU in this
1267                 case is negative with respect    1267                 case is negative with respect to the single-CPU
1268                 interrupt-disabling approach.    1268                 interrupt-disabling approach.  Others might argue that
1269                 the overhead of RCU is merely    1269                 the overhead of RCU is merely zero, and that replacing
1270                 the positive overhead of the     1270                 the positive overhead of the interrupt-disabling scheme
1271                 with the zero-overhead RCU sc    1271                 with the zero-overhead RCU scheme does not constitute
1272                 negative overhead.               1272                 negative overhead.
1273                                                  1273 
1274                 In real life, of course, thin    1274                 In real life, of course, things are more complex.  But
1275                 even the theoretical possibil    1275                 even the theoretical possibility of negative overhead for
1276                 a synchronization primitive i    1276                 a synchronization primitive is a bit unexpected.  ;-)
1277                                                  1277 
1278 :ref:`Back to Quick Quiz #2 <quiz_2>`            1278 :ref:`Back to Quick Quiz #2 <quiz_2>`
1279                                                  1279 
1280 Quick Quiz #3:                                   1280 Quick Quiz #3:
1281                 If it is illegal to block in     1281                 If it is illegal to block in an RCU read-side
1282                 critical section, what the he    1282                 critical section, what the heck do you do in
1283                 CONFIG_PREEMPT_RT, where norm    1283                 CONFIG_PREEMPT_RT, where normal spinlocks can block???
1284                                                  1284 
1285 Answer:                                          1285 Answer:
1286                 Just as CONFIG_PREEMPT_RT per    1286                 Just as CONFIG_PREEMPT_RT permits preemption of spinlock
1287                 critical sections, it permits    1287                 critical sections, it permits preemption of RCU
1288                 read-side critical sections.     1288                 read-side critical sections.  It also permits
1289                 spinlocks blocking while in R    1289                 spinlocks blocking while in RCU read-side critical
1290                 sections.                        1290                 sections.
1291                                                  1291 
1292                 Why the apparent inconsistenc    1292                 Why the apparent inconsistency?  Because it is
1293                 possible to use priority boos    1293                 possible to use priority boosting to keep the RCU
1294                 grace periods short if need b    1294                 grace periods short if need be (for example, if running
1295                 short of memory).  In contras    1295                 short of memory).  In contrast, if blocking waiting
1296                 for (say) network reception,     1296                 for (say) network reception, there is no way to know
1297                 what should be boosted.  Espe    1297                 what should be boosted.  Especially given that the
1298                 process we need to boost migh    1298                 process we need to boost might well be a human being
1299                 who just went out for a pizza    1299                 who just went out for a pizza or something.  And although
1300                 a computer-operated cattle pr    1300                 a computer-operated cattle prod might arouse serious
1301                 interest, it might also provo    1301                 interest, it might also provoke serious objections.
1302                 Besides, how does the compute    1302                 Besides, how does the computer know what pizza parlor
1303                 the human being went to???       1303                 the human being went to???
1304                                                  1304 
1305 :ref:`Back to Quick Quiz #3 <quiz_3>`            1305 :ref:`Back to Quick Quiz #3 <quiz_3>`
1306                                                  1306 
1307 ACKNOWLEDGEMENTS                                 1307 ACKNOWLEDGEMENTS
1308                                                  1308 
1309 My thanks to the people who helped make this     1309 My thanks to the people who helped make this human-readable, including
1310 Jon Walpole, Josh Triplett, Serge Hallyn, Suz    1310 Jon Walpole, Josh Triplett, Serge Hallyn, Suzanne Wood, and Alan Stern.
1311                                                  1311 
1312                                                  1312 
1313 For more information, see http://www.rdrop.co    1313 For more information, see http://www.rdrop.com/users/paulmck/RCU.
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php