rcu: Document rcu_access_pointer() feeding into cmpxchg()

This commit documents the rcu_access_pointer() use case for fetching the
old value of an RCU-protected pointer within a lockless updater for use
by an atomic cmpxchg() operation.

Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Reported-by: Maxim Mikityanskiy <maximmi@nvidia.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
This commit is contained in:
Paul E. McKenney 2026-05-08 10:43:53 -07:00 committed by Uladzislau Rezki (Sony)
parent d9b4d36b8c
commit e6cb527255

View File

@ -592,11 +592,13 @@ context_unsafe( \
* lockdep checks for being in an RCU read-side critical section. This is
* useful when the value of this pointer is accessed, but the pointer is
* not dereferenced, for example, when testing an RCU-protected pointer
* 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().
* against NULL. Within an RCU read-side critical section, there is little
* reason to use rcu_access_pointer(). 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. It is also permissible to use rcu_access_pointer()
* within lockless updaters to obtain the old value for an atomic operation,
* for example, for cmpxchg().
*
* It is usually best to test the rcu_access_pointer() return value
* directly in order to avoid accidental dereferences being introduced