mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 22:21:42 +00:00
rcu: Update rcu_access_pointer() header for rcu_dereference_protected()
The rcu_access_pointer() docbook header correctly notes that it may be used during post-grace-period teardown. However, it is usually better to use rcu_dereference_protected() for this purpose. This commit therefore calls out this preferred usage. Reported-by: Maxim Mikityanskiy <maximmi@nvidia.com> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
This commit is contained in:
parent
089254fd38
commit
d8f3f5834f
@ -496,13 +496,21 @@ do { \
|
||||
* against NULL. Although rcu_access_pointer() may also be used in cases
|
||||
* where update-side locks prevent the value of the pointer from changing,
|
||||
* you should instead use rcu_dereference_protected() for this use case.
|
||||
* Within an RCU read-side critical section, there is little reason to
|
||||
* use rcu_access_pointer().
|
||||
*
|
||||
* It is usually best to test the rcu_access_pointer() return value
|
||||
* directly in order to avoid accidental dereferences being introduced
|
||||
* by later inattentive changes. In other words, assigning the
|
||||
* rcu_access_pointer() return value to a local variable results in an
|
||||
* accident waiting to happen.
|
||||
*
|
||||
* It is also permissible to use rcu_access_pointer() when read-side
|
||||
* access to the pointer was removed at least one grace period ago, as
|
||||
* is the case in the context of the RCU callback that is freeing up
|
||||
* the data, or after a synchronize_rcu() returns. This can be useful
|
||||
* when tearing down multi-linked structures after a grace period
|
||||
* has elapsed.
|
||||
* access to the pointer was removed at least one grace period ago, as is
|
||||
* the case in the context of the RCU callback that is freeing up the data,
|
||||
* or after a synchronize_rcu() returns. This can be useful when tearing
|
||||
* down multi-linked structures after a grace period has elapsed. However,
|
||||
* rcu_dereference_protected() is normally preferred for this use case.
|
||||
*/
|
||||
#define rcu_access_pointer(p) __rcu_access_pointer((p), __UNIQUE_ID(rcu), __rcu)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user