All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@kernel.org>
To: rcu@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, kernel-team@meta.com,
	rostedt@goodmis.org, "Paul E. McKenney" <paulmck@kernel.org>,
	Maxim Mikityanskiy <maximmi@nvidia.com>
Subject: [PATCH 7/7] rcu: Document rcu_access_pointer() feeding into cmpxchg()
Date: Thu,  7 May 2026 10:09:50 -0700	[thread overview]
Message-ID: <20260507170950.2040199-7-paulmck@kernel.org> (raw)
In-Reply-To: <eeeda48e-03ed-428a-847d-5a0b56508b68@paulmck-laptop>

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.

Reported-by: Maxim Mikityanskiy <maximmi@nvidia.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
---
 include/linux/rcupdate.h | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
index bfa765132de858..5e95acc33989b6 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
@@ -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
-- 
2.40.1


  parent reply	other threads:[~2026-05-07 17:09 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-07 17:09 [PATCH 0/7] Miscellaneous RCU changes for v7.2 Paul E. McKenney
2026-05-07 17:09 ` [PATCH 1/7] srcu: Don't queue workqueue handlers to never-online CPUs Paul E. McKenney
2026-05-07 17:09 ` [PATCH 2/7] srcu: Fix kerneldoc header comment typo in srcu_down_read_fast() Paul E. McKenney
2026-05-07 17:09 ` [PATCH 3/7] checkpatch: Undeprecate rcu_read_lock_trace() and rcu_read_unlock_trace() Paul E. McKenney
2026-05-07 17:44   ` Joe Perches
2026-05-07 17:53     ` Paul E. McKenney
2026-05-07 17:09 ` [PATCH 4/7] checkpatch: Mark rcu_read_lock_tasks_trace() and friend BPF-only Paul E. McKenney
2026-05-07 17:09 ` [PATCH 5/7] rcu: Simplify rcu_do_batch() by applying clamp() Paul E. McKenney
2026-05-07 17:09 ` [PATCH 6/7] rcu: Simplify param_set_next_fqs_jiffies() by applying clamp_val() Paul E. McKenney
2026-05-07 17:09 ` Paul E. McKenney [this message]
2026-05-08 17:06 ` [PATCH 0/7] Miscellaneous RCU changes for v7.2 Uladzislau Rezki
2026-05-08 17:27   ` Paul E. McKenney
2026-05-08 17:43 ` [PATCH v2 0/6] " Paul E. McKenney
2026-05-08 17:43   ` [PATCH v2 1/6] srcu: Don't queue workqueue handlers to never-online CPUs Paul E. McKenney
2026-05-08 17:43   ` [PATCH v2 2/6] srcu: Fix kerneldoc header comment typo in srcu_down_read_fast() Paul E. McKenney
2026-05-08 17:43   ` [PATCH v2 3/6] checkpatch: Undeprecate rcu_read_lock_trace() and rcu_read_unlock_trace() Paul E. McKenney
2026-05-08 17:43   ` [PATCH v2 4/6] rcu: Simplify rcu_do_batch() by applying clamp() Paul E. McKenney
2026-05-08 17:43   ` [PATCH v2 5/6] rcu: Simplify param_set_next_fqs_jiffies() by applying clamp_val() Paul E. McKenney
2026-05-08 17:43   ` [PATCH v2 6/6] rcu: Document rcu_access_pointer() feeding into cmpxchg() Paul E. McKenney
2026-05-11  9:19   ` [PATCH v2 0/6] Miscellaneous RCU changes for v7.2 Uladzislau Rezki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260507170950.2040199-7-paulmck@kernel.org \
    --to=paulmck@kernel.org \
    --cc=kernel-team@meta.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maximmi@nvidia.com \
    --cc=rcu@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.