summaryrefslogtreecommitdiffstats
path: root/scripts/atomic/kerneldoc/try_cmpxchg
diff options
context:
space:
mode:
authorMark Rutland <mark.rutland@arm.com>2024-02-09 12:40:10 +0000
committerIngo Molnar <mingo@kernel.org>2024-02-20 09:55:09 +0100
commit6dfee110c6cc7a6c3c1f45a07428c15820b87c1d (patch)
tree0b2250a9838dc5b57e2fa55b5ff7932c946149db /scripts/atomic/kerneldoc/try_cmpxchg
parentb401b621758e46812da61fa58a67c3fd8d91de0d (diff)
downloadlinux-stable-6dfee110c6cc7a6c3c1f45a07428c15820b87c1d.tar.gz
linux-stable-6dfee110c6cc7a6c3c1f45a07428c15820b87c1d.tar.bz2
linux-stable-6dfee110c6cc7a6c3c1f45a07428c15820b87c1d.zip
locking/atomic: scripts: Clarify ordering of conditional atomics
Conditional atomic operations (e.g. cmpxchg()) only provide ordering when the condition holds; when the condition does not hold, the location is not modified and relaxed ordering is provided. Where ordering is needed for failed conditional atomics, it is necessary to use smp_mb__before_atomic() and/or smp_mb__after_atomic(). This is explained tersely in memory-barriers.txt, and is implied but not explicitly stated in the kerneldoc comments for the conditional operations. The lack of an explicit statement has lead to some off-list queries about the ordering semantics of failing conditional operations, so evidently this is confusing. Update the kerneldoc comments to explicitly describe the lack of ordering for failed conditional atomic operations. For most conditional atomic operations, this is written as: | If (${condition}), atomically updates @v to (${new}) with ${desc_order} ordering. | Otherwise, @v is not modified and relaxed ordering is provided. For the try_cmpxchg() operations, this is written as: | If (${condition}), atomically updates @v to @new with ${desc_order} ordering. | Otherwise, @v is not modified, @old is updated to the current value of @v, | and relaxed ordering is provided. Signed-off-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Reviewed-by: Paul E. McKenney <paulmck@kernel.org> Reviewed-by: Nhat Pham <nphamcs@gmail.com> Link: https://lore.kernel.org/r/20240209124010.2096198-1-mark.rutland@arm.com
Diffstat (limited to 'scripts/atomic/kerneldoc/try_cmpxchg')
-rw-r--r--scripts/atomic/kerneldoc/try_cmpxchg3
1 files changed, 2 insertions, 1 deletions
diff --git a/scripts/atomic/kerneldoc/try_cmpxchg b/scripts/atomic/kerneldoc/try_cmpxchg
index 296553206c06..3ccff29538f5 100644
--- a/scripts/atomic/kerneldoc/try_cmpxchg
+++ b/scripts/atomic/kerneldoc/try_cmpxchg
@@ -6,7 +6,8 @@ cat <<EOF
* @new: ${int} value to assign
*
* If (@v == @old), atomically updates @v to @new with ${desc_order} ordering.
- * Otherwise, updates @old to the current value of @v.
+ * Otherwise, @v is not modified, @old is updated to the current value of @v,
+ * and relaxed ordering is provided.
*
* ${desc_noinstr}
*