docs: Update RCU cross-references as suggested in doc-guide
The RCU documentation contains old-style cross references which do not follow the best practices outlined in doc-guide/sphinx.rst. In addition, some of the cross references use URLs that should be replaced by pathnames. Update all of these cross references and adjust the surrounding words. Summary of changes: - out-of-date plaintext file names (*.txt) -> *.rst - references by :ref: tags -> path names of *.rst * use relative paths to .rst files under the RCU/ subdirectory * use abs paths of Documentation/xxx for other .rst files - references by URL under https://www.kernel.org/ -> paths of *.rst - adjust surrounding words of some of updated references. Note: The automarkup.py script interprets references via "*.txt" as if they were via "*.rst", so the *.txt -> *.rst changes should be regarded as cleanups rather than bug fixes. Cc: rcu@vger.kernel.org Cc: linux-doc@vger.kernel.org Tested-by: Bagas Sanjaya <bagasdotme@gmail.com> Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org> Signed-off-by: Akira Yokosawa <akiyks@gmail.com> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
This commit is contained in:
parent
6172de3c7f
commit
404147faaa
|
@ -973,7 +973,7 @@ The ``->dynticks`` field counts the corresponding CPU's transitions to
|
||||||
and from either dyntick-idle or user mode, so that this counter has an
|
and from either dyntick-idle or user mode, so that this counter has an
|
||||||
even value when the CPU is in dyntick-idle mode or user mode and an odd
|
even value when the CPU is in dyntick-idle mode or user mode and an odd
|
||||||
value otherwise. The transitions to/from user mode need to be counted
|
value otherwise. The transitions to/from user mode need to be counted
|
||||||
for user mode adaptive-ticks support (see timers/NO_HZ.txt).
|
for user mode adaptive-ticks support (see Documentation/timers/no_hz.rst).
|
||||||
|
|
||||||
The ``->rcu_need_heavy_qs`` field is used to record the fact that the
|
The ``->rcu_need_heavy_qs`` field is used to record the fact that the
|
||||||
RCU core code would really like to see a quiescent state from the
|
RCU core code would really like to see a quiescent state from the
|
||||||
|
|
|
@ -406,7 +406,7 @@ In earlier implementations, the task requesting the expedited grace
|
||||||
period also drove it to completion. This straightforward approach had
|
period also drove it to completion. This straightforward approach had
|
||||||
the disadvantage of needing to account for POSIX signals sent to user
|
the disadvantage of needing to account for POSIX signals sent to user
|
||||||
tasks, so more recent implemementations use the Linux kernel's
|
tasks, so more recent implemementations use the Linux kernel's
|
||||||
`workqueues <https://www.kernel.org/doc/Documentation/core-api/workqueue.rst>`__.
|
workqueues (see Documentation/core-api/workqueue.rst).
|
||||||
|
|
||||||
The requesting task still does counter snapshotting and funnel-lock
|
The requesting task still does counter snapshotting and funnel-lock
|
||||||
processing, but the task reaching the top of the funnel lock does a
|
processing, but the task reaching the top of the funnel lock does a
|
||||||
|
|
|
@ -370,8 +370,8 @@ pointer fetched by rcu_dereference() may not be used outside of the
|
||||||
outermost RCU read-side critical section containing that
|
outermost RCU read-side critical section containing that
|
||||||
rcu_dereference(), unless protection of the corresponding data
|
rcu_dereference(), unless protection of the corresponding data
|
||||||
element has been passed from RCU to some other synchronization
|
element has been passed from RCU to some other synchronization
|
||||||
mechanism, most commonly locking or `reference
|
mechanism, most commonly locking or reference counting
|
||||||
counting <https://www.kernel.org/doc/Documentation/RCU/rcuref.txt>`__.
|
(see ../../rcuref.rst).
|
||||||
|
|
||||||
.. |high-quality implementation of C11 memory_order_consume [PDF]| replace:: high-quality implementation of C11 ``memory_order_consume`` [PDF]
|
.. |high-quality implementation of C11 memory_order_consume [PDF]| replace:: high-quality implementation of C11 ``memory_order_consume`` [PDF]
|
||||||
.. _high-quality implementation of C11 memory_order_consume [PDF]: http://www.rdrop.com/users/paulmck/RCU/consume.2015.07.13a.pdf
|
.. _high-quality implementation of C11 memory_order_consume [PDF]: http://www.rdrop.com/users/paulmck/RCU/consume.2015.07.13a.pdf
|
||||||
|
|
|
@ -33,8 +33,8 @@ Situation 1: Hash Tables
|
||||||
|
|
||||||
Hash tables are often implemented as an array, where each array entry
|
Hash tables are often implemented as an array, where each array entry
|
||||||
has a linked-list hash chain. Each hash chain can be protected by RCU
|
has a linked-list hash chain. Each hash chain can be protected by RCU
|
||||||
as described in the listRCU.txt document. This approach also applies
|
as described in listRCU.rst. This approach also applies to other
|
||||||
to other array-of-list situations, such as radix trees.
|
array-of-list situations, such as radix trees.
|
||||||
|
|
||||||
.. _static_arrays:
|
.. _static_arrays:
|
||||||
|
|
||||||
|
|
|
@ -140,8 +140,7 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
prevents destructive compiler optimizations. However,
|
prevents destructive compiler optimizations. However,
|
||||||
with a bit of devious creativity, it is possible to
|
with a bit of devious creativity, it is possible to
|
||||||
mishandle the return value from rcu_dereference().
|
mishandle the return value from rcu_dereference().
|
||||||
Please see rcu_dereference.txt in this directory for
|
Please see rcu_dereference.rst for more information.
|
||||||
more information.
|
|
||||||
|
|
||||||
The rcu_dereference() primitive is used by the
|
The rcu_dereference() primitive is used by the
|
||||||
various "_rcu()" list-traversal primitives, such
|
various "_rcu()" list-traversal primitives, such
|
||||||
|
@ -151,7 +150,7 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
primitives. This is particularly useful in code that
|
primitives. This is particularly useful in code that
|
||||||
is common to readers and updaters. However, lockdep
|
is common to readers and updaters. However, lockdep
|
||||||
will complain if you access rcu_dereference() outside
|
will complain if you access rcu_dereference() outside
|
||||||
of an RCU read-side critical section. See lockdep.txt
|
of an RCU read-side critical section. See lockdep.rst
|
||||||
to learn what to do about this.
|
to learn what to do about this.
|
||||||
|
|
||||||
Of course, neither rcu_dereference() nor the "_rcu()"
|
Of course, neither rcu_dereference() nor the "_rcu()"
|
||||||
|
@ -323,7 +322,7 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
primitives when the update-side lock is held is that doing so
|
primitives when the update-side lock is held is that doing so
|
||||||
can be quite helpful in reducing code bloat when common code is
|
can be quite helpful in reducing code bloat when common code is
|
||||||
shared between readers and updaters. Additional primitives
|
shared between readers and updaters. Additional primitives
|
||||||
are provided for this case, as discussed in lockdep.txt.
|
are provided for this case, as discussed in lockdep.rst.
|
||||||
|
|
||||||
One exception to this rule is when data is only ever added to
|
One exception to this rule is when data is only ever added to
|
||||||
the linked data structure, and is never removed during any
|
the linked data structure, and is never removed during any
|
||||||
|
@ -480,4 +479,4 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
both rcu_barrier() and synchronize_rcu(), if necessary, using
|
both rcu_barrier() and synchronize_rcu(), if necessary, using
|
||||||
something like workqueues to to execute them concurrently.
|
something like workqueues to to execute them concurrently.
|
||||||
|
|
||||||
See rcubarrier.txt for more information.
|
See rcubarrier.rst for more information.
|
||||||
|
|
|
@ -10,9 +10,8 @@ A "grace period" must elapse between the two parts, and this grace period
|
||||||
must be long enough that any readers accessing the item being deleted have
|
must be long enough that any readers accessing the item being deleted have
|
||||||
since dropped their references. For example, an RCU-protected deletion
|
since dropped their references. For example, an RCU-protected deletion
|
||||||
from a linked list would first remove the item from the list, wait for
|
from a linked list would first remove the item from the list, wait for
|
||||||
a grace period to elapse, then free the element. See the
|
a grace period to elapse, then free the element. See listRCU.rst for more
|
||||||
:ref:`Documentation/RCU/listRCU.rst <list_rcu_doc>` for more information on
|
information on using RCU with linked lists.
|
||||||
using RCU with linked lists.
|
|
||||||
|
|
||||||
Frequently Asked Questions
|
Frequently Asked Questions
|
||||||
--------------------------
|
--------------------------
|
||||||
|
@ -50,7 +49,7 @@ Frequently Asked Questions
|
||||||
- If I am running on a uniprocessor kernel, which can only do one
|
- If I am running on a uniprocessor kernel, which can only do one
|
||||||
thing at a time, why should I wait for a grace period?
|
thing at a time, why should I wait for a grace period?
|
||||||
|
|
||||||
See :ref:`Documentation/RCU/UP.rst <up_doc>` for more information.
|
See UP.rst for more information.
|
||||||
|
|
||||||
- How can I see where RCU is currently used in the Linux kernel?
|
- How can I see where RCU is currently used in the Linux kernel?
|
||||||
|
|
||||||
|
@ -64,13 +63,13 @@ Frequently Asked Questions
|
||||||
|
|
||||||
- What guidelines should I follow when writing code that uses RCU?
|
- What guidelines should I follow when writing code that uses RCU?
|
||||||
|
|
||||||
See the checklist.txt file in this directory.
|
See checklist.rst.
|
||||||
|
|
||||||
- Why the name "RCU"?
|
- Why the name "RCU"?
|
||||||
|
|
||||||
"RCU" stands for "read-copy update".
|
"RCU" stands for "read-copy update".
|
||||||
:ref:`Documentation/RCU/listRCU.rst <list_rcu_doc>` has more information on where
|
listRCU.rst has more information on where this name came from, search
|
||||||
this name came from, search for "read-copy update" to find it.
|
for "read-copy update" to find it.
|
||||||
|
|
||||||
- I hear that RCU is patented? What is with that?
|
- I hear that RCU is patented? What is with that?
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ This section describes how to use hlist_nulls to
|
||||||
protect read-mostly linked lists and
|
protect read-mostly linked lists and
|
||||||
objects using SLAB_TYPESAFE_BY_RCU allocations.
|
objects using SLAB_TYPESAFE_BY_RCU allocations.
|
||||||
|
|
||||||
Please read the basics in Documentation/RCU/listRCU.rst
|
Please read the basics in listRCU.rst.
|
||||||
|
|
||||||
Using 'nulls'
|
Using 'nulls'
|
||||||
=============
|
=============
|
||||||
|
|
|
@ -224,7 +224,7 @@ synchronize_rcu()
|
||||||
be delayed. This property results in system resilience in face
|
be delayed. This property results in system resilience in face
|
||||||
of denial-of-service attacks. Code using call_rcu() should limit
|
of denial-of-service attacks. Code using call_rcu() should limit
|
||||||
update rate in order to gain this same sort of resilience. See
|
update rate in order to gain this same sort of resilience. See
|
||||||
checklist.txt for some approaches to limiting the update rate.
|
checklist.rst for some approaches to limiting the update rate.
|
||||||
|
|
||||||
rcu_assign_pointer()
|
rcu_assign_pointer()
|
||||||
^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -318,7 +318,7 @@ rcu_dereference()
|
||||||
must prohibit. The rcu_dereference_protected() variant takes
|
must prohibit. The rcu_dereference_protected() variant takes
|
||||||
a lockdep expression to indicate which locks must be acquired
|
a lockdep expression to indicate which locks must be acquired
|
||||||
by the caller. If the indicated protection is not provided,
|
by the caller. If the indicated protection is not provided,
|
||||||
a lockdep splat is emitted. See Documentation/RCU/Design/Requirements/Requirements.rst
|
a lockdep splat is emitted. See Design/Requirements/Requirements.rst
|
||||||
and the API's code comments for more details and example usage.
|
and the API's code comments for more details and example usage.
|
||||||
|
|
||||||
.. [2] If the list_for_each_entry_rcu() instance might be used by
|
.. [2] If the list_for_each_entry_rcu() instance might be used by
|
||||||
|
@ -399,8 +399,7 @@ for specialized uses, but are relatively uncommon.
|
||||||
|
|
||||||
This section shows a simple use of the core RCU API to protect a
|
This section shows a simple use of the core RCU API to protect a
|
||||||
global pointer to a dynamically allocated structure. More-typical
|
global pointer to a dynamically allocated structure. More-typical
|
||||||
uses of RCU may be found in :ref:`listRCU.rst <list_rcu_doc>`,
|
uses of RCU may be found in listRCU.rst, arrayRCU.rst, and NMI-RCU.rst.
|
||||||
:ref:`arrayRCU.rst <array_rcu_doc>`, and :ref:`NMI-RCU.rst <NMI_rcu_doc>`.
|
|
||||||
::
|
::
|
||||||
|
|
||||||
struct foo {
|
struct foo {
|
||||||
|
@ -482,10 +481,9 @@ So, to sum up:
|
||||||
RCU read-side critical sections that might be referencing that
|
RCU read-side critical sections that might be referencing that
|
||||||
data item.
|
data item.
|
||||||
|
|
||||||
See checklist.txt for additional rules to follow when using RCU.
|
See checklist.rst for additional rules to follow when using RCU.
|
||||||
And again, more-typical uses of RCU may be found in :ref:`listRCU.rst
|
And again, more-typical uses of RCU may be found in listRCU.rst,
|
||||||
<list_rcu_doc>`, :ref:`arrayRCU.rst <array_rcu_doc>`, and :ref:`NMI-RCU.rst
|
arrayRCU.rst, and NMI-RCU.rst.
|
||||||
<NMI_rcu_doc>`.
|
|
||||||
|
|
||||||
.. _4_whatisRCU:
|
.. _4_whatisRCU:
|
||||||
|
|
||||||
|
@ -579,7 +577,7 @@ to avoid having to write your own callback::
|
||||||
|
|
||||||
kfree_rcu(old_fp, rcu);
|
kfree_rcu(old_fp, rcu);
|
||||||
|
|
||||||
Again, see checklist.txt for additional rules governing the use of RCU.
|
Again, see checklist.rst for additional rules governing the use of RCU.
|
||||||
|
|
||||||
.. _5_whatisRCU:
|
.. _5_whatisRCU:
|
||||||
|
|
||||||
|
@ -663,7 +661,7 @@ been able to write-acquire the lock otherwise. The smp_mb__after_spinlock()
|
||||||
promotes synchronize_rcu() to a full memory barrier in compliance with
|
promotes synchronize_rcu() to a full memory barrier in compliance with
|
||||||
the "Memory-Barrier Guarantees" listed in:
|
the "Memory-Barrier Guarantees" listed in:
|
||||||
|
|
||||||
Documentation/RCU/Design/Requirements/Requirements.rst
|
Design/Requirements/Requirements.rst
|
||||||
|
|
||||||
It is possible to nest rcu_read_lock(), since reader-writer locks may
|
It is possible to nest rcu_read_lock(), since reader-writer locks may
|
||||||
be recursively acquired. Note also that rcu_read_lock() is immune
|
be recursively acquired. Note also that rcu_read_lock() is immune
|
||||||
|
|
Loading…
Reference in New Issue