WIP FPC-III support
[linux/fpc-iii.git] / Documentation / RCU / Design / Memory-Ordering / Tree-RCU-Memory-Ordering.rst
bloba648b423ba0eb40b5be84f63f308888d8738f568
1 ======================================================
2 A Tour Through TREE_RCU's Grace-Period Memory Ordering
3 ======================================================
5 August 8, 2017
7 This article was contributed by Paul E. McKenney
9 Introduction
10 ============
12 This document gives a rough visual overview of how Tree RCU's
13 grace-period memory ordering guarantee is provided.
15 What Is Tree RCU's Grace Period Memory Ordering Guarantee?
16 ==========================================================
18 RCU grace periods provide extremely strong memory-ordering guarantees
19 for non-idle non-offline code.
20 Any code that happens after the end of a given RCU grace period is guaranteed
21 to see the effects of all accesses prior to the beginning of that grace
22 period that are within RCU read-side critical sections.
23 Similarly, any code that happens before the beginning of a given RCU grace
24 period is guaranteed to see the effects of all accesses following the end
25 of that grace period that are within RCU read-side critical sections.
27 Note well that RCU-sched read-side critical sections include any region
28 of code for which preemption is disabled.
29 Given that each individual machine instruction can be thought of as
30 an extremely small region of preemption-disabled code, one can think of
31 ``synchronize_rcu()`` as ``smp_mb()`` on steroids.
33 RCU updaters use this guarantee by splitting their updates into
34 two phases, one of which is executed before the grace period and
35 the other of which is executed after the grace period.
36 In the most common use case, phase one removes an element from
37 a linked RCU-protected data structure, and phase two frees that element.
38 For this to work, any readers that have witnessed state prior to the
39 phase-one update (in the common case, removal) must not witness state
40 following the phase-two update (in the common case, freeing).
42 The RCU implementation provides this guarantee using a network
43 of lock-based critical sections, memory barriers, and per-CPU
44 processing, as is described in the following sections.
46 Tree RCU Grace Period Memory Ordering Building Blocks
47 =====================================================
49 The workhorse for RCU's grace-period memory ordering is the
50 critical section for the ``rcu_node`` structure's
51 ``->lock``. These critical sections use helper functions for lock
52 acquisition, including ``raw_spin_lock_rcu_node()``,
53 ``raw_spin_lock_irq_rcu_node()``, and ``raw_spin_lock_irqsave_rcu_node()``.
54 Their lock-release counterparts are ``raw_spin_unlock_rcu_node()``,
55 ``raw_spin_unlock_irq_rcu_node()``, and
56 ``raw_spin_unlock_irqrestore_rcu_node()``, respectively.
57 For completeness, a ``raw_spin_trylock_rcu_node()`` is also provided.
58 The key point is that the lock-acquisition functions, including
59 ``raw_spin_trylock_rcu_node()``, all invoke ``smp_mb__after_unlock_lock()``
60 immediately after successful acquisition of the lock.
62 Therefore, for any given ``rcu_node`` structure, any access
63 happening before one of the above lock-release functions will be seen
64 by all CPUs as happening before any access happening after a later
65 one of the above lock-acquisition functions.
66 Furthermore, any access happening before one of the
67 above lock-release function on any given CPU will be seen by all
68 CPUs as happening before any access happening after a later one
69 of the above lock-acquisition functions executing on that same CPU,
70 even if the lock-release and lock-acquisition functions are operating
71 on different ``rcu_node`` structures.
72 Tree RCU uses these two ordering guarantees to form an ordering
73 network among all CPUs that were in any way involved in the grace
74 period, including any CPUs that came online or went offline during
75 the grace period in question.
77 The following litmus test exhibits the ordering effects of these
78 lock-acquisition and lock-release functions::
80     1 int x, y, z;
81     2
82     3 void task0(void)
83     4 {
84     5   raw_spin_lock_rcu_node(rnp);
85     6   WRITE_ONCE(x, 1);
86     7   r1 = READ_ONCE(y);
87     8   raw_spin_unlock_rcu_node(rnp);
88     9 }
89    10
90    11 void task1(void)
91    12 {
92    13   raw_spin_lock_rcu_node(rnp);
93    14   WRITE_ONCE(y, 1);
94    15   r2 = READ_ONCE(z);
95    16   raw_spin_unlock_rcu_node(rnp);
96    17 }
97    18
98    19 void task2(void)
99    20 {
100    21   WRITE_ONCE(z, 1);
101    22   smp_mb();
102    23   r3 = READ_ONCE(x);
103    24 }
104    25
105    26 WARN_ON(r1 == 0 && r2 == 0 && r3 == 0);
107 The ``WARN_ON()`` is evaluated at "the end of time",
108 after all changes have propagated throughout the system.
109 Without the ``smp_mb__after_unlock_lock()`` provided by the
110 acquisition functions, this ``WARN_ON()`` could trigger, for example
111 on PowerPC.
112 The ``smp_mb__after_unlock_lock()`` invocations prevent this
113 ``WARN_ON()`` from triggering.
115 This approach must be extended to include idle CPUs, which need
116 RCU's grace-period memory ordering guarantee to extend to any
117 RCU read-side critical sections preceding and following the current
118 idle sojourn.
119 This case is handled by calls to the strongly ordered
120 ``atomic_add_return()`` read-modify-write atomic operation that
121 is invoked within ``rcu_dynticks_eqs_enter()`` at idle-entry
122 time and within ``rcu_dynticks_eqs_exit()`` at idle-exit time.
123 The grace-period kthread invokes ``rcu_dynticks_snap()`` and
124 ``rcu_dynticks_in_eqs_since()`` (both of which invoke
125 an ``atomic_add_return()`` of zero) to detect idle CPUs.
127 +-----------------------------------------------------------------------+
128 | **Quick Quiz**:                                                       |
129 +-----------------------------------------------------------------------+
130 | But what about CPUs that remain offline for the entire grace period?  |
131 +-----------------------------------------------------------------------+
132 | **Answer**:                                                           |
133 +-----------------------------------------------------------------------+
134 | Such CPUs will be offline at the beginning of the grace period, so    |
135 | the grace period won't expect quiescent states from them. Races       |
136 | between grace-period start and CPU-hotplug operations are mediated    |
137 | by the CPU's leaf ``rcu_node`` structure's ``->lock`` as described    |
138 | above.                                                                |
139 +-----------------------------------------------------------------------+
141 The approach must be extended to handle one final case, that of waking a
142 task blocked in ``synchronize_rcu()``. This task might be affinitied to
143 a CPU that is not yet aware that the grace period has ended, and thus
144 might not yet be subject to the grace period's memory ordering.
145 Therefore, there is an ``smp_mb()`` after the return from
146 ``wait_for_completion()`` in the ``synchronize_rcu()`` code path.
148 +-----------------------------------------------------------------------+
149 | **Quick Quiz**:                                                       |
150 +-----------------------------------------------------------------------+
151 | What? Where??? I don't see any ``smp_mb()`` after the return from     |
152 | ``wait_for_completion()``!!!                                          |
153 +-----------------------------------------------------------------------+
154 | **Answer**:                                                           |
155 +-----------------------------------------------------------------------+
156 | That would be because I spotted the need for that ``smp_mb()`` during |
157 | the creation of this documentation, and it is therefore unlikely to   |
158 | hit mainline before v4.14. Kudos to Lance Roy, Will Deacon, Peter     |
159 | Zijlstra, and Jonathan Cameron for asking questions that sensitized   |
160 | me to the rather elaborate sequence of events that demonstrate the    |
161 | need for this memory barrier.                                         |
162 +-----------------------------------------------------------------------+
164 Tree RCU's grace--period memory-ordering guarantees rely most heavily on
165 the ``rcu_node`` structure's ``->lock`` field, so much so that it is
166 necessary to abbreviate this pattern in the diagrams in the next
167 section. For example, consider the ``rcu_prepare_for_idle()`` function
168 shown below, which is one of several functions that enforce ordering of
169 newly arrived RCU callbacks against future grace periods:
173     1 static void rcu_prepare_for_idle(void)
174     2 {
175     3   bool needwake;
176     4   struct rcu_data *rdp;
177     5   struct rcu_dynticks *rdtp = this_cpu_ptr(&rcu_dynticks);
178     6   struct rcu_node *rnp;
179     7   struct rcu_state *rsp;
180     8   int tne;
181     9
182    10   if (IS_ENABLED(CONFIG_RCU_NOCB_CPU_ALL) ||
183    11       rcu_is_nocb_cpu(smp_processor_id()))
184    12     return;
185    13   tne = READ_ONCE(tick_nohz_active);
186    14   if (tne != rdtp->tick_nohz_enabled_snap) {
187    15     if (rcu_cpu_has_callbacks(NULL))
188    16       invoke_rcu_core();
189    17     rdtp->tick_nohz_enabled_snap = tne;
190    18     return;
191    19   }
192    20   if (!tne)
193    21     return;
194    22   if (rdtp->all_lazy &&
195    23       rdtp->nonlazy_posted != rdtp->nonlazy_posted_snap) {
196    24     rdtp->all_lazy = false;
197    25     rdtp->nonlazy_posted_snap = rdtp->nonlazy_posted;
198    26     invoke_rcu_core();
199    27     return;
200    28   }
201    29   if (rdtp->last_accelerate == jiffies)
202    30     return;
203    31   rdtp->last_accelerate = jiffies;
204    32   for_each_rcu_flavor(rsp) {
205    33     rdp = this_cpu_ptr(rsp->rda);
206    34     if (rcu_segcblist_pend_cbs(&rdp->cblist))
207    35       continue;
208    36     rnp = rdp->mynode;
209    37     raw_spin_lock_rcu_node(rnp);
210    38     needwake = rcu_accelerate_cbs(rsp, rnp, rdp);
211    39     raw_spin_unlock_rcu_node(rnp);
212    40     if (needwake)
213    41       rcu_gp_kthread_wake(rsp);
214    42   }
215    43 }
217 But the only part of ``rcu_prepare_for_idle()`` that really matters for
218 this discussion are lines 37–39. We will therefore abbreviate this
219 function as follows:
221 .. kernel-figure:: rcu_node-lock.svg
223 The box represents the ``rcu_node`` structure's ``->lock`` critical
224 section, with the double line on top representing the additional
225 ``smp_mb__after_unlock_lock()``.
227 Tree RCU Grace Period Memory Ordering Components
228 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
230 Tree RCU's grace-period memory-ordering guarantee is provided by a
231 number of RCU components:
233 #. `Callback Registry`_
234 #. `Grace-Period Initialization`_
235 #. `Self-Reported Quiescent States`_
236 #. `Dynamic Tick Interface`_
237 #. `CPU-Hotplug Interface`_
238 #. `Forcing Quiescent States`_
239 #. `Grace-Period Cleanup`_
240 #. `Callback Invocation`_
242 Each of the following section looks at the corresponding component in
243 detail.
245 Callback Registry
246 ^^^^^^^^^^^^^^^^^
248 If RCU's grace-period guarantee is to mean anything at all, any access
249 that happens before a given invocation of ``call_rcu()`` must also
250 happen before the corresponding grace period. The implementation of this
251 portion of RCU's grace period guarantee is shown in the following
252 figure:
254 .. kernel-figure:: TreeRCU-callback-registry.svg
256 Because ``call_rcu()`` normally acts only on CPU-local state, it
257 provides no ordering guarantees, either for itself or for phase one of
258 the update (which again will usually be removal of an element from an
259 RCU-protected data structure). It simply enqueues the ``rcu_head``
260 structure on a per-CPU list, which cannot become associated with a grace
261 period until a later call to ``rcu_accelerate_cbs()``, as shown in the
262 diagram above.
264 One set of code paths shown on the left invokes ``rcu_accelerate_cbs()``
265 via ``note_gp_changes()``, either directly from ``call_rcu()`` (if the
266 current CPU is inundated with queued ``rcu_head`` structures) or more
267 likely from an ``RCU_SOFTIRQ`` handler. Another code path in the middle
268 is taken only in kernels built with ``CONFIG_RCU_FAST_NO_HZ=y``, which
269 invokes ``rcu_accelerate_cbs()`` via ``rcu_prepare_for_idle()``. The
270 final code path on the right is taken only in kernels built with
271 ``CONFIG_HOTPLUG_CPU=y``, which invokes ``rcu_accelerate_cbs()`` via
272 ``rcu_advance_cbs()``, ``rcu_migrate_callbacks``,
273 ``rcutree_migrate_callbacks()``, and ``takedown_cpu()``, which in turn
274 is invoked on a surviving CPU after the outgoing CPU has been completely
275 offlined.
277 There are a few other code paths within grace-period processing that
278 opportunistically invoke ``rcu_accelerate_cbs()``. However, either way,
279 all of the CPU's recently queued ``rcu_head`` structures are associated
280 with a future grace-period number under the protection of the CPU's lead
281 ``rcu_node`` structure's ``->lock``. In all cases, there is full
282 ordering against any prior critical section for that same ``rcu_node``
283 structure's ``->lock``, and also full ordering against any of the
284 current task's or CPU's prior critical sections for any ``rcu_node``
285 structure's ``->lock``.
287 The next section will show how this ordering ensures that any accesses
288 prior to the ``call_rcu()`` (particularly including phase one of the
289 update) happen before the start of the corresponding grace period.
291 +-----------------------------------------------------------------------+
292 | **Quick Quiz**:                                                       |
293 +-----------------------------------------------------------------------+
294 | But what about ``synchronize_rcu()``?                                 |
295 +-----------------------------------------------------------------------+
296 | **Answer**:                                                           |
297 +-----------------------------------------------------------------------+
298 | The ``synchronize_rcu()`` passes ``call_rcu()`` to ``wait_rcu_gp()``, |
299 | which invokes it. So either way, it eventually comes down to          |
300 | ``call_rcu()``.                                                       |
301 +-----------------------------------------------------------------------+
303 Grace-Period Initialization
304 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
306 Grace-period initialization is carried out by the grace-period kernel
307 thread, which makes several passes over the ``rcu_node`` tree within the
308 ``rcu_gp_init()`` function. This means that showing the full flow of
309 ordering through the grace-period computation will require duplicating
310 this tree. If you find this confusing, please note that the state of the
311 ``rcu_node`` changes over time, just like Heraclitus's river. However,
312 to keep the ``rcu_node`` river tractable, the grace-period kernel
313 thread's traversals are presented in multiple parts, starting in this
314 section with the various phases of grace-period initialization.
316 The first ordering-related grace-period initialization action is to
317 advance the ``rcu_state`` structure's ``->gp_seq`` grace-period-number
318 counter, as shown below:
320 .. kernel-figure:: TreeRCU-gp-init-1.svg
322 The actual increment is carried out using ``smp_store_release()``, which
323 helps reject false-positive RCU CPU stall detection. Note that only the
324 root ``rcu_node`` structure is touched.
326 The first pass through the ``rcu_node`` tree updates bitmasks based on
327 CPUs having come online or gone offline since the start of the previous
328 grace period. In the common case where the number of online CPUs for
329 this ``rcu_node`` structure has not transitioned to or from zero, this
330 pass will scan only the leaf ``rcu_node`` structures. However, if the
331 number of online CPUs for a given leaf ``rcu_node`` structure has
332 transitioned from zero, ``rcu_init_new_rnp()`` will be invoked for the
333 first incoming CPU. Similarly, if the number of online CPUs for a given
334 leaf ``rcu_node`` structure has transitioned to zero,
335 ``rcu_cleanup_dead_rnp()`` will be invoked for the last outgoing CPU.
336 The diagram below shows the path of ordering if the leftmost
337 ``rcu_node`` structure onlines its first CPU and if the next
338 ``rcu_node`` structure has no online CPUs (or, alternatively if the
339 leftmost ``rcu_node`` structure offlines its last CPU and if the next
340 ``rcu_node`` structure has no online CPUs).
342 .. kernel-figure:: TreeRCU-gp-init-1.svg
344 The final ``rcu_gp_init()`` pass through the ``rcu_node`` tree traverses
345 breadth-first, setting each ``rcu_node`` structure's ``->gp_seq`` field
346 to the newly advanced value from the ``rcu_state`` structure, as shown
347 in the following diagram.
349 .. kernel-figure:: TreeRCU-gp-init-1.svg
351 This change will also cause each CPU's next call to
352 ``__note_gp_changes()`` to notice that a new grace period has started,
353 as described in the next section. But because the grace-period kthread
354 started the grace period at the root (with the advancing of the
355 ``rcu_state`` structure's ``->gp_seq`` field) before setting each leaf
356 ``rcu_node`` structure's ``->gp_seq`` field, each CPU's observation of
357 the start of the grace period will happen after the actual start of the
358 grace period.
360 +-----------------------------------------------------------------------+
361 | **Quick Quiz**:                                                       |
362 +-----------------------------------------------------------------------+
363 | But what about the CPU that started the grace period? Why wouldn't it |
364 | see the start of the grace period right when it started that grace    |
365 | period?                                                               |
366 +-----------------------------------------------------------------------+
367 | **Answer**:                                                           |
368 +-----------------------------------------------------------------------+
369 | In some deep philosophical and overly anthromorphized sense, yes, the |
370 | CPU starting the grace period is immediately aware of having done so. |
371 | However, if we instead assume that RCU is not self-aware, then even   |
372 | the CPU starting the grace period does not really become aware of the |
373 | start of this grace period until its first call to                    |
374 | ``__note_gp_changes()``. On the other hand, this CPU potentially gets |
375 | early notification because it invokes ``__note_gp_changes()`` during  |
376 | its last ``rcu_gp_init()`` pass through its leaf ``rcu_node``         |
377 | structure.                                                            |
378 +-----------------------------------------------------------------------+
380 Self-Reported Quiescent States
381 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
383 When all entities that might block the grace period have reported
384 quiescent states (or as described in a later section, had quiescent
385 states reported on their behalf), the grace period can end. Online
386 non-idle CPUs report their own quiescent states, as shown in the
387 following diagram:
389 .. kernel-figure:: TreeRCU-qs.svg
391 This is for the last CPU to report a quiescent state, which signals the
392 end of the grace period. Earlier quiescent states would push up the
393 ``rcu_node`` tree only until they encountered an ``rcu_node`` structure
394 that is waiting for additional quiescent states. However, ordering is
395 nevertheless preserved because some later quiescent state will acquire
396 that ``rcu_node`` structure's ``->lock``.
398 Any number of events can lead up to a CPU invoking ``note_gp_changes``
399 (or alternatively, directly invoking ``__note_gp_changes()``), at which
400 point that CPU will notice the start of a new grace period while holding
401 its leaf ``rcu_node`` lock. Therefore, all execution shown in this
402 diagram happens after the start of the grace period. In addition, this
403 CPU will consider any RCU read-side critical section that started before
404 the invocation of ``__note_gp_changes()`` to have started before the
405 grace period, and thus a critical section that the grace period must
406 wait on.
408 +-----------------------------------------------------------------------+
409 | **Quick Quiz**:                                                       |
410 +-----------------------------------------------------------------------+
411 | But a RCU read-side critical section might have started after the     |
412 | beginning of the grace period (the advancing of ``->gp_seq`` from     |
413 | earlier), so why should the grace period wait on such a critical      |
414 | section?                                                              |
415 +-----------------------------------------------------------------------+
416 | **Answer**:                                                           |
417 +-----------------------------------------------------------------------+
418 | It is indeed not necessary for the grace period to wait on such a     |
419 | critical section. However, it is permissible to wait on it. And it is |
420 | furthermore important to wait on it, as this lazy approach is far     |
421 | more scalable than a “big bang” all-at-once grace-period start could  |
422 | possibly be.                                                          |
423 +-----------------------------------------------------------------------+
425 If the CPU does a context switch, a quiescent state will be noted by
426 ``rcu_note_context_switch()`` on the left. On the other hand, if the CPU
427 takes a scheduler-clock interrupt while executing in usermode, a
428 quiescent state will be noted by ``rcu_sched_clock_irq()`` on the right.
429 Either way, the passage through a quiescent state will be noted in a
430 per-CPU variable.
432 The next time an ``RCU_SOFTIRQ`` handler executes on this CPU (for
433 example, after the next scheduler-clock interrupt), ``rcu_core()`` will
434 invoke ``rcu_check_quiescent_state()``, which will notice the recorded
435 quiescent state, and invoke ``rcu_report_qs_rdp()``. If
436 ``rcu_report_qs_rdp()`` verifies that the quiescent state really does
437 apply to the current grace period, it invokes ``rcu_report_rnp()`` which
438 traverses up the ``rcu_node`` tree as shown at the bottom of the
439 diagram, clearing bits from each ``rcu_node`` structure's ``->qsmask``
440 field, and propagating up the tree when the result is zero.
442 Note that traversal passes upwards out of a given ``rcu_node`` structure
443 only if the current CPU is reporting the last quiescent state for the
444 subtree headed by that ``rcu_node`` structure. A key point is that if a
445 CPU's traversal stops at a given ``rcu_node`` structure, then there will
446 be a later traversal by another CPU (or perhaps the same one) that
447 proceeds upwards from that point, and the ``rcu_node`` ``->lock``
448 guarantees that the first CPU's quiescent state happens before the
449 remainder of the second CPU's traversal. Applying this line of thought
450 repeatedly shows that all CPUs' quiescent states happen before the last
451 CPU traverses through the root ``rcu_node`` structure, the “last CPU”
452 being the one that clears the last bit in the root ``rcu_node``
453 structure's ``->qsmask`` field.
455 Dynamic Tick Interface
456 ^^^^^^^^^^^^^^^^^^^^^^
458 Due to energy-efficiency considerations, RCU is forbidden from
459 disturbing idle CPUs. CPUs are therefore required to notify RCU when
460 entering or leaving idle state, which they do via fully ordered
461 value-returning atomic operations on a per-CPU variable. The ordering
462 effects are as shown below:
464 .. kernel-figure:: TreeRCU-dyntick.svg
466 The RCU grace-period kernel thread samples the per-CPU idleness variable
467 while holding the corresponding CPU's leaf ``rcu_node`` structure's
468 ``->lock``. This means that any RCU read-side critical sections that
469 precede the idle period (the oval near the top of the diagram above)
470 will happen before the end of the current grace period. Similarly, the
471 beginning of the current grace period will happen before any RCU
472 read-side critical sections that follow the idle period (the oval near
473 the bottom of the diagram above).
475 Plumbing this into the full grace-period execution is described
476 `below <Forcing Quiescent States_>`__.
478 CPU-Hotplug Interface
479 ^^^^^^^^^^^^^^^^^^^^^
481 RCU is also forbidden from disturbing offline CPUs, which might well be
482 powered off and removed from the system completely. CPUs are therefore
483 required to notify RCU of their comings and goings as part of the
484 corresponding CPU hotplug operations. The ordering effects are shown
485 below:
487 .. kernel-figure:: TreeRCU-hotplug.svg
489 Because CPU hotplug operations are much less frequent than idle
490 transitions, they are heavier weight, and thus acquire the CPU's leaf
491 ``rcu_node`` structure's ``->lock`` and update this structure's
492 ``->qsmaskinitnext``. The RCU grace-period kernel thread samples this
493 mask to detect CPUs having gone offline since the beginning of this
494 grace period.
496 Plumbing this into the full grace-period execution is described
497 `below <Forcing Quiescent States_>`__.
499 Forcing Quiescent States
500 ^^^^^^^^^^^^^^^^^^^^^^^^
502 As noted above, idle and offline CPUs cannot report their own quiescent
503 states, and therefore the grace-period kernel thread must do the
504 reporting on their behalf. This process is called “forcing quiescent
505 states”, it is repeated every few jiffies, and its ordering effects are
506 shown below:
508 .. kernel-figure:: TreeRCU-gp-fqs.svg
510 Each pass of quiescent state forcing is guaranteed to traverse the leaf
511 ``rcu_node`` structures, and if there are no new quiescent states due to
512 recently idled and/or offlined CPUs, then only the leaves are traversed.
513 However, if there is a newly offlined CPU as illustrated on the left or
514 a newly idled CPU as illustrated on the right, the corresponding
515 quiescent state will be driven up towards the root. As with
516 self-reported quiescent states, the upwards driving stops once it
517 reaches an ``rcu_node`` structure that has quiescent states outstanding
518 from other CPUs.
520 +-----------------------------------------------------------------------+
521 | **Quick Quiz**:                                                       |
522 +-----------------------------------------------------------------------+
523 | The leftmost drive to root stopped before it reached the root         |
524 | ``rcu_node`` structure, which means that there are still CPUs         |
525 | subordinate to that structure on which the current grace period is    |
526 | waiting. Given that, how is it possible that the rightmost drive to   |
527 | root ended the grace period?                                          |
528 +-----------------------------------------------------------------------+
529 | **Answer**:                                                           |
530 +-----------------------------------------------------------------------+
531 | Good analysis! It is in fact impossible in the absence of bugs in     |
532 | RCU. But this diagram is complex enough as it is, so simplicity       |
533 | overrode accuracy. You can think of it as poetic license, or you can  |
534 | think of it as misdirection that is resolved in the                   |
535 | `stitched-together diagram <Putting It All Together_>`__.             |
536 +-----------------------------------------------------------------------+
538 Grace-Period Cleanup
539 ^^^^^^^^^^^^^^^^^^^^
541 Grace-period cleanup first scans the ``rcu_node`` tree breadth-first
542 advancing all the ``->gp_seq`` fields, then it advances the
543 ``rcu_state`` structure's ``->gp_seq`` field. The ordering effects are
544 shown below:
546 .. kernel-figure:: TreeRCU-gp-cleanup.svg
548 As indicated by the oval at the bottom of the diagram, once grace-period
549 cleanup is complete, the next grace period can begin.
551 +-----------------------------------------------------------------------+
552 | **Quick Quiz**:                                                       |
553 +-----------------------------------------------------------------------+
554 | But when precisely does the grace period end?                         |
555 +-----------------------------------------------------------------------+
556 | **Answer**:                                                           |
557 +-----------------------------------------------------------------------+
558 | There is no useful single point at which the grace period can be said |
559 | to end. The earliest reasonable candidate is as soon as the last CPU  |
560 | has reported its quiescent state, but it may be some milliseconds     |
561 | before RCU becomes aware of this. The latest reasonable candidate is  |
562 | once the ``rcu_state`` structure's ``->gp_seq`` field has been        |
563 | updated, but it is quite possible that some CPUs have already         |
564 | completed phase two of their updates by that time. In short, if you   |
565 | are going to work with RCU, you need to learn to embrace uncertainty. |
566 +-----------------------------------------------------------------------+
568 Callback Invocation
569 ^^^^^^^^^^^^^^^^^^^
571 Once a given CPU's leaf ``rcu_node`` structure's ``->gp_seq`` field has
572 been updated, that CPU can begin invoking its RCU callbacks that were
573 waiting for this grace period to end. These callbacks are identified by
574 ``rcu_advance_cbs()``, which is usually invoked by
575 ``__note_gp_changes()``. As shown in the diagram below, this invocation
576 can be triggered by the scheduling-clock interrupt
577 (``rcu_sched_clock_irq()`` on the left) or by idle entry
578 (``rcu_cleanup_after_idle()`` on the right, but only for kernels build
579 with ``CONFIG_RCU_FAST_NO_HZ=y``). Either way, ``RCU_SOFTIRQ`` is
580 raised, which results in ``rcu_do_batch()`` invoking the callbacks,
581 which in turn allows those callbacks to carry out (either directly or
582 indirectly via wakeup) the needed phase-two processing for each update.
584 .. kernel-figure:: TreeRCU-callback-invocation.svg
586 Please note that callback invocation can also be prompted by any number
587 of corner-case code paths, for example, when a CPU notes that it has
588 excessive numbers of callbacks queued. In all cases, the CPU acquires
589 its leaf ``rcu_node`` structure's ``->lock`` before invoking callbacks,
590 which preserves the required ordering against the newly completed grace
591 period.
593 However, if the callback function communicates to other CPUs, for
594 example, doing a wakeup, then it is that function's responsibility to
595 maintain ordering. For example, if the callback function wakes up a task
596 that runs on some other CPU, proper ordering must in place in both the
597 callback function and the task being awakened. To see why this is
598 important, consider the top half of the `grace-period
599 cleanup`_ diagram. The callback might be
600 running on a CPU corresponding to the leftmost leaf ``rcu_node``
601 structure, and awaken a task that is to run on a CPU corresponding to
602 the rightmost leaf ``rcu_node`` structure, and the grace-period kernel
603 thread might not yet have reached the rightmost leaf. In this case, the
604 grace period's memory ordering might not yet have reached that CPU, so
605 again the callback function and the awakened task must supply proper
606 ordering.
608 Putting It All Together
609 ~~~~~~~~~~~~~~~~~~~~~~~
611 A stitched-together diagram is here:
613 .. kernel-figure:: TreeRCU-gp.svg
615 Legal Statement
616 ~~~~~~~~~~~~~~~
618 This work represents the view of the author and does not necessarily
619 represent the view of IBM.
621 Linux is a registered trademark of Linus Torvalds.
623 Other company, product, and service names may be trademarks or service
624 marks of others.