Commit 6dfee110 authored by Mark Rutland's avatar Mark Rutland Committed by Ingo Molnar

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: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
Reviewed-by: default avatarPaul E. McKenney <paulmck@kernel.org>
Reviewed-by: default avatarNhat Pham <nphamcs@gmail.com>
Link: https://lore.kernel.org/r/20240209124010.2096198-1-mark.rutland@arm.com
parent b401b621
...@@ -2005,6 +2005,7 @@ raw_atomic_xchg_relaxed(atomic_t *v, int new) ...@@ -2005,6 +2005,7 @@ raw_atomic_xchg_relaxed(atomic_t *v, int new)
* @new: int value to assign * @new: int value to assign
* *
* If (@v == @old), atomically updates @v to @new with full ordering. * If (@v == @old), atomically updates @v to @new with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_cmpxchg() elsewhere. * Safe to use in noinstr code; prefer atomic_cmpxchg() elsewhere.
* *
...@@ -2033,6 +2034,7 @@ raw_atomic_cmpxchg(atomic_t *v, int old, int new) ...@@ -2033,6 +2034,7 @@ raw_atomic_cmpxchg(atomic_t *v, int old, int new)
* @new: int value to assign * @new: int value to assign
* *
* If (@v == @old), atomically updates @v to @new with acquire ordering. * If (@v == @old), atomically updates @v to @new with acquire ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_cmpxchg_acquire() elsewhere. * Safe to use in noinstr code; prefer atomic_cmpxchg_acquire() elsewhere.
* *
...@@ -2061,6 +2063,7 @@ raw_atomic_cmpxchg_acquire(atomic_t *v, int old, int new) ...@@ -2061,6 +2063,7 @@ raw_atomic_cmpxchg_acquire(atomic_t *v, int old, int new)
* @new: int value to assign * @new: int value to assign
* *
* If (@v == @old), atomically updates @v to @new with release ordering. * If (@v == @old), atomically updates @v to @new with release ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_cmpxchg_release() elsewhere. * Safe to use in noinstr code; prefer atomic_cmpxchg_release() elsewhere.
* *
...@@ -2088,6 +2091,7 @@ raw_atomic_cmpxchg_release(atomic_t *v, int old, int new) ...@@ -2088,6 +2091,7 @@ raw_atomic_cmpxchg_release(atomic_t *v, int old, int new)
* @new: int value to assign * @new: int value to assign
* *
* If (@v == @old), atomically updates @v to @new with relaxed ordering. * If (@v == @old), atomically updates @v to @new with relaxed ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_cmpxchg_relaxed() elsewhere. * Safe to use in noinstr code; prefer atomic_cmpxchg_relaxed() elsewhere.
* *
...@@ -2112,7 +2116,8 @@ raw_atomic_cmpxchg_relaxed(atomic_t *v, int old, int new) ...@@ -2112,7 +2116,8 @@ raw_atomic_cmpxchg_relaxed(atomic_t *v, int old, int new)
* @new: int value to assign * @new: int value to assign
* *
* If (@v == @old), atomically updates @v to @new with full ordering. * If (@v == @old), atomically updates @v to @new with full 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.
* *
* Safe to use in noinstr code; prefer atomic_try_cmpxchg() elsewhere. * Safe to use in noinstr code; prefer atomic_try_cmpxchg() elsewhere.
* *
...@@ -2145,7 +2150,8 @@ raw_atomic_try_cmpxchg(atomic_t *v, int *old, int new) ...@@ -2145,7 +2150,8 @@ raw_atomic_try_cmpxchg(atomic_t *v, int *old, int new)
* @new: int value to assign * @new: int value to assign
* *
* If (@v == @old), atomically updates @v to @new with acquire ordering. * If (@v == @old), atomically updates @v to @new with acquire 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.
* *
* Safe to use in noinstr code; prefer atomic_try_cmpxchg_acquire() elsewhere. * Safe to use in noinstr code; prefer atomic_try_cmpxchg_acquire() elsewhere.
* *
...@@ -2178,7 +2184,8 @@ raw_atomic_try_cmpxchg_acquire(atomic_t *v, int *old, int new) ...@@ -2178,7 +2184,8 @@ raw_atomic_try_cmpxchg_acquire(atomic_t *v, int *old, int new)
* @new: int value to assign * @new: int value to assign
* *
* If (@v == @old), atomically updates @v to @new with release ordering. * If (@v == @old), atomically updates @v to @new with release 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.
* *
* Safe to use in noinstr code; prefer atomic_try_cmpxchg_release() elsewhere. * Safe to use in noinstr code; prefer atomic_try_cmpxchg_release() elsewhere.
* *
...@@ -2210,7 +2217,8 @@ raw_atomic_try_cmpxchg_release(atomic_t *v, int *old, int new) ...@@ -2210,7 +2217,8 @@ raw_atomic_try_cmpxchg_release(atomic_t *v, int *old, int new)
* @new: int value to assign * @new: int value to assign
* *
* If (@v == @old), atomically updates @v to @new with relaxed ordering. * If (@v == @old), atomically updates @v to @new with relaxed 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.
* *
* Safe to use in noinstr code; prefer atomic_try_cmpxchg_relaxed() elsewhere. * Safe to use in noinstr code; prefer atomic_try_cmpxchg_relaxed() elsewhere.
* *
...@@ -2403,6 +2411,7 @@ raw_atomic_add_negative_relaxed(int i, atomic_t *v) ...@@ -2403,6 +2411,7 @@ raw_atomic_add_negative_relaxed(int i, atomic_t *v)
* @u: int value to compare with * @u: int value to compare with
* *
* If (@v != @u), atomically updates @v to (@v + @a) with full ordering. * If (@v != @u), atomically updates @v to (@v + @a) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_fetch_add_unless() elsewhere. * Safe to use in noinstr code; prefer atomic_fetch_add_unless() elsewhere.
* *
...@@ -2432,6 +2441,7 @@ raw_atomic_fetch_add_unless(atomic_t *v, int a, int u) ...@@ -2432,6 +2441,7 @@ raw_atomic_fetch_add_unless(atomic_t *v, int a, int u)
* @u: int value to compare with * @u: int value to compare with
* *
* If (@v != @u), atomically updates @v to (@v + @a) with full ordering. * If (@v != @u), atomically updates @v to (@v + @a) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_add_unless() elsewhere. * Safe to use in noinstr code; prefer atomic_add_unless() elsewhere.
* *
...@@ -2452,6 +2462,7 @@ raw_atomic_add_unless(atomic_t *v, int a, int u) ...@@ -2452,6 +2462,7 @@ raw_atomic_add_unless(atomic_t *v, int a, int u)
* @v: pointer to atomic_t * @v: pointer to atomic_t
* *
* If (@v != 0), atomically updates @v to (@v + 1) with full ordering. * If (@v != 0), atomically updates @v to (@v + 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_inc_not_zero() elsewhere. * Safe to use in noinstr code; prefer atomic_inc_not_zero() elsewhere.
* *
...@@ -2472,6 +2483,7 @@ raw_atomic_inc_not_zero(atomic_t *v) ...@@ -2472,6 +2483,7 @@ raw_atomic_inc_not_zero(atomic_t *v)
* @v: pointer to atomic_t * @v: pointer to atomic_t
* *
* If (@v >= 0), atomically updates @v to (@v + 1) with full ordering. * If (@v >= 0), atomically updates @v to (@v + 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_inc_unless_negative() elsewhere. * Safe to use in noinstr code; prefer atomic_inc_unless_negative() elsewhere.
* *
...@@ -2499,6 +2511,7 @@ raw_atomic_inc_unless_negative(atomic_t *v) ...@@ -2499,6 +2511,7 @@ raw_atomic_inc_unless_negative(atomic_t *v)
* @v: pointer to atomic_t * @v: pointer to atomic_t
* *
* If (@v <= 0), atomically updates @v to (@v - 1) with full ordering. * If (@v <= 0), atomically updates @v to (@v - 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_dec_unless_positive() elsewhere. * Safe to use in noinstr code; prefer atomic_dec_unless_positive() elsewhere.
* *
...@@ -2526,6 +2539,7 @@ raw_atomic_dec_unless_positive(atomic_t *v) ...@@ -2526,6 +2539,7 @@ raw_atomic_dec_unless_positive(atomic_t *v)
* @v: pointer to atomic_t * @v: pointer to atomic_t
* *
* If (@v > 0), atomically updates @v to (@v - 1) with full ordering. * If (@v > 0), atomically updates @v to (@v - 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_dec_if_positive() elsewhere. * Safe to use in noinstr code; prefer atomic_dec_if_positive() elsewhere.
* *
...@@ -4117,6 +4131,7 @@ raw_atomic64_xchg_relaxed(atomic64_t *v, s64 new) ...@@ -4117,6 +4131,7 @@ raw_atomic64_xchg_relaxed(atomic64_t *v, s64 new)
* @new: s64 value to assign * @new: s64 value to assign
* *
* If (@v == @old), atomically updates @v to @new with full ordering. * If (@v == @old), atomically updates @v to @new with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic64_cmpxchg() elsewhere. * Safe to use in noinstr code; prefer atomic64_cmpxchg() elsewhere.
* *
...@@ -4145,6 +4160,7 @@ raw_atomic64_cmpxchg(atomic64_t *v, s64 old, s64 new) ...@@ -4145,6 +4160,7 @@ raw_atomic64_cmpxchg(atomic64_t *v, s64 old, s64 new)
* @new: s64 value to assign * @new: s64 value to assign
* *
* If (@v == @old), atomically updates @v to @new with acquire ordering. * If (@v == @old), atomically updates @v to @new with acquire ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic64_cmpxchg_acquire() elsewhere. * Safe to use in noinstr code; prefer atomic64_cmpxchg_acquire() elsewhere.
* *
...@@ -4173,6 +4189,7 @@ raw_atomic64_cmpxchg_acquire(atomic64_t *v, s64 old, s64 new) ...@@ -4173,6 +4189,7 @@ raw_atomic64_cmpxchg_acquire(atomic64_t *v, s64 old, s64 new)
* @new: s64 value to assign * @new: s64 value to assign
* *
* If (@v == @old), atomically updates @v to @new with release ordering. * If (@v == @old), atomically updates @v to @new with release ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic64_cmpxchg_release() elsewhere. * Safe to use in noinstr code; prefer atomic64_cmpxchg_release() elsewhere.
* *
...@@ -4200,6 +4217,7 @@ raw_atomic64_cmpxchg_release(atomic64_t *v, s64 old, s64 new) ...@@ -4200,6 +4217,7 @@ raw_atomic64_cmpxchg_release(atomic64_t *v, s64 old, s64 new)
* @new: s64 value to assign * @new: s64 value to assign
* *
* If (@v == @old), atomically updates @v to @new with relaxed ordering. * If (@v == @old), atomically updates @v to @new with relaxed ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic64_cmpxchg_relaxed() elsewhere. * Safe to use in noinstr code; prefer atomic64_cmpxchg_relaxed() elsewhere.
* *
...@@ -4224,7 +4242,8 @@ raw_atomic64_cmpxchg_relaxed(atomic64_t *v, s64 old, s64 new) ...@@ -4224,7 +4242,8 @@ raw_atomic64_cmpxchg_relaxed(atomic64_t *v, s64 old, s64 new)
* @new: s64 value to assign * @new: s64 value to assign
* *
* If (@v == @old), atomically updates @v to @new with full ordering. * If (@v == @old), atomically updates @v to @new with full 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.
* *
* Safe to use in noinstr code; prefer atomic64_try_cmpxchg() elsewhere. * Safe to use in noinstr code; prefer atomic64_try_cmpxchg() elsewhere.
* *
...@@ -4257,7 +4276,8 @@ raw_atomic64_try_cmpxchg(atomic64_t *v, s64 *old, s64 new) ...@@ -4257,7 +4276,8 @@ raw_atomic64_try_cmpxchg(atomic64_t *v, s64 *old, s64 new)
* @new: s64 value to assign * @new: s64 value to assign
* *
* If (@v == @old), atomically updates @v to @new with acquire ordering. * If (@v == @old), atomically updates @v to @new with acquire 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.
* *
* Safe to use in noinstr code; prefer atomic64_try_cmpxchg_acquire() elsewhere. * Safe to use in noinstr code; prefer atomic64_try_cmpxchg_acquire() elsewhere.
* *
...@@ -4290,7 +4310,8 @@ raw_atomic64_try_cmpxchg_acquire(atomic64_t *v, s64 *old, s64 new) ...@@ -4290,7 +4310,8 @@ raw_atomic64_try_cmpxchg_acquire(atomic64_t *v, s64 *old, s64 new)
* @new: s64 value to assign * @new: s64 value to assign
* *
* If (@v == @old), atomically updates @v to @new with release ordering. * If (@v == @old), atomically updates @v to @new with release 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.
* *
* Safe to use in noinstr code; prefer atomic64_try_cmpxchg_release() elsewhere. * Safe to use in noinstr code; prefer atomic64_try_cmpxchg_release() elsewhere.
* *
...@@ -4322,7 +4343,8 @@ raw_atomic64_try_cmpxchg_release(atomic64_t *v, s64 *old, s64 new) ...@@ -4322,7 +4343,8 @@ raw_atomic64_try_cmpxchg_release(atomic64_t *v, s64 *old, s64 new)
* @new: s64 value to assign * @new: s64 value to assign
* *
* If (@v == @old), atomically updates @v to @new with relaxed ordering. * If (@v == @old), atomically updates @v to @new with relaxed 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.
* *
* Safe to use in noinstr code; prefer atomic64_try_cmpxchg_relaxed() elsewhere. * Safe to use in noinstr code; prefer atomic64_try_cmpxchg_relaxed() elsewhere.
* *
...@@ -4515,6 +4537,7 @@ raw_atomic64_add_negative_relaxed(s64 i, atomic64_t *v) ...@@ -4515,6 +4537,7 @@ raw_atomic64_add_negative_relaxed(s64 i, atomic64_t *v)
* @u: s64 value to compare with * @u: s64 value to compare with
* *
* If (@v != @u), atomically updates @v to (@v + @a) with full ordering. * If (@v != @u), atomically updates @v to (@v + @a) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic64_fetch_add_unless() elsewhere. * Safe to use in noinstr code; prefer atomic64_fetch_add_unless() elsewhere.
* *
...@@ -4544,6 +4567,7 @@ raw_atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u) ...@@ -4544,6 +4567,7 @@ raw_atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u)
* @u: s64 value to compare with * @u: s64 value to compare with
* *
* If (@v != @u), atomically updates @v to (@v + @a) with full ordering. * If (@v != @u), atomically updates @v to (@v + @a) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic64_add_unless() elsewhere. * Safe to use in noinstr code; prefer atomic64_add_unless() elsewhere.
* *
...@@ -4564,6 +4588,7 @@ raw_atomic64_add_unless(atomic64_t *v, s64 a, s64 u) ...@@ -4564,6 +4588,7 @@ raw_atomic64_add_unless(atomic64_t *v, s64 a, s64 u)
* @v: pointer to atomic64_t * @v: pointer to atomic64_t
* *
* If (@v != 0), atomically updates @v to (@v + 1) with full ordering. * If (@v != 0), atomically updates @v to (@v + 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic64_inc_not_zero() elsewhere. * Safe to use in noinstr code; prefer atomic64_inc_not_zero() elsewhere.
* *
...@@ -4584,6 +4609,7 @@ raw_atomic64_inc_not_zero(atomic64_t *v) ...@@ -4584,6 +4609,7 @@ raw_atomic64_inc_not_zero(atomic64_t *v)
* @v: pointer to atomic64_t * @v: pointer to atomic64_t
* *
* If (@v >= 0), atomically updates @v to (@v + 1) with full ordering. * If (@v >= 0), atomically updates @v to (@v + 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic64_inc_unless_negative() elsewhere. * Safe to use in noinstr code; prefer atomic64_inc_unless_negative() elsewhere.
* *
...@@ -4611,6 +4637,7 @@ raw_atomic64_inc_unless_negative(atomic64_t *v) ...@@ -4611,6 +4637,7 @@ raw_atomic64_inc_unless_negative(atomic64_t *v)
* @v: pointer to atomic64_t * @v: pointer to atomic64_t
* *
* If (@v <= 0), atomically updates @v to (@v - 1) with full ordering. * If (@v <= 0), atomically updates @v to (@v - 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic64_dec_unless_positive() elsewhere. * Safe to use in noinstr code; prefer atomic64_dec_unless_positive() elsewhere.
* *
...@@ -4638,6 +4665,7 @@ raw_atomic64_dec_unless_positive(atomic64_t *v) ...@@ -4638,6 +4665,7 @@ raw_atomic64_dec_unless_positive(atomic64_t *v)
* @v: pointer to atomic64_t * @v: pointer to atomic64_t
* *
* If (@v > 0), atomically updates @v to (@v - 1) with full ordering. * If (@v > 0), atomically updates @v to (@v - 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic64_dec_if_positive() elsewhere. * Safe to use in noinstr code; prefer atomic64_dec_if_positive() elsewhere.
* *
...@@ -4662,4 +4690,4 @@ raw_atomic64_dec_if_positive(atomic64_t *v) ...@@ -4662,4 +4690,4 @@ raw_atomic64_dec_if_positive(atomic64_t *v)
} }
#endif /* _LINUX_ATOMIC_FALLBACK_H */ #endif /* _LINUX_ATOMIC_FALLBACK_H */
// eec048affea735b8464f58e6d96992101f8f85f1 // 14850c0b0db20c62fdc78ccd1d42b98b88d76331
...@@ -1182,6 +1182,7 @@ atomic_xchg_relaxed(atomic_t *v, int new) ...@@ -1182,6 +1182,7 @@ atomic_xchg_relaxed(atomic_t *v, int new)
* @new: int value to assign * @new: int value to assign
* *
* If (@v == @old), atomically updates @v to @new with full ordering. * If (@v == @old), atomically updates @v to @new with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_cmpxchg() there. * Unsafe to use in noinstr code; use raw_atomic_cmpxchg() there.
* *
...@@ -1202,6 +1203,7 @@ atomic_cmpxchg(atomic_t *v, int old, int new) ...@@ -1202,6 +1203,7 @@ atomic_cmpxchg(atomic_t *v, int old, int new)
* @new: int value to assign * @new: int value to assign
* *
* If (@v == @old), atomically updates @v to @new with acquire ordering. * If (@v == @old), atomically updates @v to @new with acquire ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_cmpxchg_acquire() there. * Unsafe to use in noinstr code; use raw_atomic_cmpxchg_acquire() there.
* *
...@@ -1221,6 +1223,7 @@ atomic_cmpxchg_acquire(atomic_t *v, int old, int new) ...@@ -1221,6 +1223,7 @@ atomic_cmpxchg_acquire(atomic_t *v, int old, int new)
* @new: int value to assign * @new: int value to assign
* *
* If (@v == @old), atomically updates @v to @new with release ordering. * If (@v == @old), atomically updates @v to @new with release ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_cmpxchg_release() there. * Unsafe to use in noinstr code; use raw_atomic_cmpxchg_release() there.
* *
...@@ -1241,6 +1244,7 @@ atomic_cmpxchg_release(atomic_t *v, int old, int new) ...@@ -1241,6 +1244,7 @@ atomic_cmpxchg_release(atomic_t *v, int old, int new)
* @new: int value to assign * @new: int value to assign
* *
* If (@v == @old), atomically updates @v to @new with relaxed ordering. * If (@v == @old), atomically updates @v to @new with relaxed ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_cmpxchg_relaxed() there. * Unsafe to use in noinstr code; use raw_atomic_cmpxchg_relaxed() there.
* *
...@@ -1260,7 +1264,8 @@ atomic_cmpxchg_relaxed(atomic_t *v, int old, int new) ...@@ -1260,7 +1264,8 @@ atomic_cmpxchg_relaxed(atomic_t *v, int old, int new)
* @new: int value to assign * @new: int value to assign
* *
* If (@v == @old), atomically updates @v to @new with full ordering. * If (@v == @old), atomically updates @v to @new with full 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.
* *
* Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg() there. * Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg() there.
* *
...@@ -1282,7 +1287,8 @@ atomic_try_cmpxchg(atomic_t *v, int *old, int new) ...@@ -1282,7 +1287,8 @@ atomic_try_cmpxchg(atomic_t *v, int *old, int new)
* @new: int value to assign * @new: int value to assign
* *
* If (@v == @old), atomically updates @v to @new with acquire ordering. * If (@v == @old), atomically updates @v to @new with acquire 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.
* *
* Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg_acquire() there. * Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg_acquire() there.
* *
...@@ -1303,7 +1309,8 @@ atomic_try_cmpxchg_acquire(atomic_t *v, int *old, int new) ...@@ -1303,7 +1309,8 @@ atomic_try_cmpxchg_acquire(atomic_t *v, int *old, int new)
* @new: int value to assign * @new: int value to assign
* *
* If (@v == @old), atomically updates @v to @new with release ordering. * If (@v == @old), atomically updates @v to @new with release 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.
* *
* Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg_release() there. * Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg_release() there.
* *
...@@ -1325,7 +1332,8 @@ atomic_try_cmpxchg_release(atomic_t *v, int *old, int new) ...@@ -1325,7 +1332,8 @@ atomic_try_cmpxchg_release(atomic_t *v, int *old, int new)
* @new: int value to assign * @new: int value to assign
* *
* If (@v == @old), atomically updates @v to @new with relaxed ordering. * If (@v == @old), atomically updates @v to @new with relaxed 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.
* *
* Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg_relaxed() there. * Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg_relaxed() there.
* *
...@@ -1475,6 +1483,7 @@ atomic_add_negative_relaxed(int i, atomic_t *v) ...@@ -1475,6 +1483,7 @@ atomic_add_negative_relaxed(int i, atomic_t *v)
* @u: int value to compare with * @u: int value to compare with
* *
* If (@v != @u), atomically updates @v to (@v + @a) with full ordering. * If (@v != @u), atomically updates @v to (@v + @a) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_fetch_add_unless() there. * Unsafe to use in noinstr code; use raw_atomic_fetch_add_unless() there.
* *
...@@ -1495,6 +1504,7 @@ atomic_fetch_add_unless(atomic_t *v, int a, int u) ...@@ -1495,6 +1504,7 @@ atomic_fetch_add_unless(atomic_t *v, int a, int u)
* @u: int value to compare with * @u: int value to compare with
* *
* If (@v != @u), atomically updates @v to (@v + @a) with full ordering. * If (@v != @u), atomically updates @v to (@v + @a) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_add_unless() there. * Unsafe to use in noinstr code; use raw_atomic_add_unless() there.
* *
...@@ -1513,6 +1523,7 @@ atomic_add_unless(atomic_t *v, int a, int u) ...@@ -1513,6 +1523,7 @@ atomic_add_unless(atomic_t *v, int a, int u)
* @v: pointer to atomic_t * @v: pointer to atomic_t
* *
* If (@v != 0), atomically updates @v to (@v + 1) with full ordering. * If (@v != 0), atomically updates @v to (@v + 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_inc_not_zero() there. * Unsafe to use in noinstr code; use raw_atomic_inc_not_zero() there.
* *
...@@ -1531,6 +1542,7 @@ atomic_inc_not_zero(atomic_t *v) ...@@ -1531,6 +1542,7 @@ atomic_inc_not_zero(atomic_t *v)
* @v: pointer to atomic_t * @v: pointer to atomic_t
* *
* If (@v >= 0), atomically updates @v to (@v + 1) with full ordering. * If (@v >= 0), atomically updates @v to (@v + 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_inc_unless_negative() there. * Unsafe to use in noinstr code; use raw_atomic_inc_unless_negative() there.
* *
...@@ -1549,6 +1561,7 @@ atomic_inc_unless_negative(atomic_t *v) ...@@ -1549,6 +1561,7 @@ atomic_inc_unless_negative(atomic_t *v)
* @v: pointer to atomic_t * @v: pointer to atomic_t
* *
* If (@v <= 0), atomically updates @v to (@v - 1) with full ordering. * If (@v <= 0), atomically updates @v to (@v - 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_dec_unless_positive() there. * Unsafe to use in noinstr code; use raw_atomic_dec_unless_positive() there.
* *
...@@ -1567,6 +1580,7 @@ atomic_dec_unless_positive(atomic_t *v) ...@@ -1567,6 +1580,7 @@ atomic_dec_unless_positive(atomic_t *v)
* @v: pointer to atomic_t * @v: pointer to atomic_t
* *
* If (@v > 0), atomically updates @v to (@v - 1) with full ordering. * If (@v > 0), atomically updates @v to (@v - 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_dec_if_positive() there. * Unsafe to use in noinstr code; use raw_atomic_dec_if_positive() there.
* *
...@@ -2746,6 +2760,7 @@ atomic64_xchg_relaxed(atomic64_t *v, s64 new) ...@@ -2746,6 +2760,7 @@ atomic64_xchg_relaxed(atomic64_t *v, s64 new)
* @new: s64 value to assign * @new: s64 value to assign
* *
* If (@v == @old), atomically updates @v to @new with full ordering. * If (@v == @old), atomically updates @v to @new with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic64_cmpxchg() there. * Unsafe to use in noinstr code; use raw_atomic64_cmpxchg() there.
* *
...@@ -2766,6 +2781,7 @@ atomic64_cmpxchg(atomic64_t *v, s64 old, s64 new) ...@@ -2766,6 +2781,7 @@ atomic64_cmpxchg(atomic64_t *v, s64 old, s64 new)
* @new: s64 value to assign * @new: s64 value to assign
* *
* If (@v == @old), atomically updates @v to @new with acquire ordering. * If (@v == @old), atomically updates @v to @new with acquire ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic64_cmpxchg_acquire() there. * Unsafe to use in noinstr code; use raw_atomic64_cmpxchg_acquire() there.
* *
...@@ -2785,6 +2801,7 @@ atomic64_cmpxchg_acquire(atomic64_t *v, s64 old, s64 new) ...@@ -2785,6 +2801,7 @@ atomic64_cmpxchg_acquire(atomic64_t *v, s64 old, s64 new)
* @new: s64 value to assign * @new: s64 value to assign
* *
* If (@v == @old), atomically updates @v to @new with release ordering. * If (@v == @old), atomically updates @v to @new with release ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic64_cmpxchg_release() there. * Unsafe to use in noinstr code; use raw_atomic64_cmpxchg_release() there.
* *
...@@ -2805,6 +2822,7 @@ atomic64_cmpxchg_release(atomic64_t *v, s64 old, s64 new) ...@@ -2805,6 +2822,7 @@ atomic64_cmpxchg_release(atomic64_t *v, s64 old, s64 new)
* @new: s64 value to assign * @new: s64 value to assign
* *
* If (@v == @old), atomically updates @v to @new with relaxed ordering. * If (@v == @old), atomically updates @v to @new with relaxed ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic64_cmpxchg_relaxed() there. * Unsafe to use in noinstr code; use raw_atomic64_cmpxchg_relaxed() there.
* *
...@@ -2824,7 +2842,8 @@ atomic64_cmpxchg_relaxed(atomic64_t *v, s64 old, s64 new) ...@@ -2824,7 +2842,8 @@ atomic64_cmpxchg_relaxed(atomic64_t *v, s64 old, s64 new)
* @new: s64 value to assign * @new: s64 value to assign
* *
* If (@v == @old), atomically updates @v to @new with full ordering. * If (@v == @old), atomically updates @v to @new with full 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.
* *
* Unsafe to use in noinstr code; use raw_atomic64_try_cmpxchg() there. * Unsafe to use in noinstr code; use raw_atomic64_try_cmpxchg() there.
* *
...@@ -2846,7 +2865,8 @@ atomic64_try_cmpxchg(atomic64_t *v, s64 *old, s64 new) ...@@ -2846,7 +2865,8 @@ atomic64_try_cmpxchg(atomic64_t *v, s64 *old, s64 new)
* @new: s64 value to assign * @new: s64 value to assign
* *
* If (@v == @old), atomically updates @v to @new with acquire ordering. * If (@v == @old), atomically updates @v to @new with acquire 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.
* *
* Unsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_acquire() there. * Unsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_acquire() there.
* *
...@@ -2867,7 +2887,8 @@ atomic64_try_cmpxchg_acquire(atomic64_t *v, s64 *old, s64 new) ...@@ -2867,7 +2887,8 @@ atomic64_try_cmpxchg_acquire(atomic64_t *v, s64 *old, s64 new)
* @new: s64 value to assign * @new: s64 value to assign
* *
* If (@v == @old), atomically updates @v to @new with release ordering. * If (@v == @old), atomically updates @v to @new with release 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.
* *
* Unsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_release() there. * Unsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_release() there.
* *
...@@ -2889,7 +2910,8 @@ atomic64_try_cmpxchg_release(atomic64_t *v, s64 *old, s64 new) ...@@ -2889,7 +2910,8 @@ atomic64_try_cmpxchg_release(atomic64_t *v, s64 *old, s64 new)
* @new: s64 value to assign * @new: s64 value to assign
* *
* If (@v == @old), atomically updates @v to @new with relaxed ordering. * If (@v == @old), atomically updates @v to @new with relaxed 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.
* *
* Unsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_relaxed() there. * Unsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_relaxed() there.
* *
...@@ -3039,6 +3061,7 @@ atomic64_add_negative_relaxed(s64 i, atomic64_t *v) ...@@ -3039,6 +3061,7 @@ atomic64_add_negative_relaxed(s64 i, atomic64_t *v)
* @u: s64 value to compare with * @u: s64 value to compare with
* *
* If (@v != @u), atomically updates @v to (@v + @a) with full ordering. * If (@v != @u), atomically updates @v to (@v + @a) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic64_fetch_add_unless() there. * Unsafe to use in noinstr code; use raw_atomic64_fetch_add_unless() there.
* *
...@@ -3059,6 +3082,7 @@ atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u) ...@@ -3059,6 +3082,7 @@ atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u)
* @u: s64 value to compare with * @u: s64 value to compare with
* *
* If (@v != @u), atomically updates @v to (@v + @a) with full ordering. * If (@v != @u), atomically updates @v to (@v + @a) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic64_add_unless() there. * Unsafe to use in noinstr code; use raw_atomic64_add_unless() there.
* *
...@@ -3077,6 +3101,7 @@ atomic64_add_unless(atomic64_t *v, s64 a, s64 u) ...@@ -3077,6 +3101,7 @@ atomic64_add_unless(atomic64_t *v, s64 a, s64 u)
* @v: pointer to atomic64_t * @v: pointer to atomic64_t
* *
* If (@v != 0), atomically updates @v to (@v + 1) with full ordering. * If (@v != 0), atomically updates @v to (@v + 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic64_inc_not_zero() there. * Unsafe to use in noinstr code; use raw_atomic64_inc_not_zero() there.
* *
...@@ -3095,6 +3120,7 @@ atomic64_inc_not_zero(atomic64_t *v) ...@@ -3095,6 +3120,7 @@ atomic64_inc_not_zero(atomic64_t *v)
* @v: pointer to atomic64_t * @v: pointer to atomic64_t
* *
* If (@v >= 0), atomically updates @v to (@v + 1) with full ordering. * If (@v >= 0), atomically updates @v to (@v + 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic64_inc_unless_negative() there. * Unsafe to use in noinstr code; use raw_atomic64_inc_unless_negative() there.
* *
...@@ -3113,6 +3139,7 @@ atomic64_inc_unless_negative(atomic64_t *v) ...@@ -3113,6 +3139,7 @@ atomic64_inc_unless_negative(atomic64_t *v)
* @v: pointer to atomic64_t * @v: pointer to atomic64_t
* *
* If (@v <= 0), atomically updates @v to (@v - 1) with full ordering. * If (@v <= 0), atomically updates @v to (@v - 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic64_dec_unless_positive() there. * Unsafe to use in noinstr code; use raw_atomic64_dec_unless_positive() there.
* *
...@@ -3131,6 +3158,7 @@ atomic64_dec_unless_positive(atomic64_t *v) ...@@ -3131,6 +3158,7 @@ atomic64_dec_unless_positive(atomic64_t *v)
* @v: pointer to atomic64_t * @v: pointer to atomic64_t
* *
* If (@v > 0), atomically updates @v to (@v - 1) with full ordering. * If (@v > 0), atomically updates @v to (@v - 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic64_dec_if_positive() there. * Unsafe to use in noinstr code; use raw_atomic64_dec_if_positive() there.
* *
...@@ -4310,6 +4338,7 @@ atomic_long_xchg_relaxed(atomic_long_t *v, long new) ...@@ -4310,6 +4338,7 @@ atomic_long_xchg_relaxed(atomic_long_t *v, long new)
* @new: long value to assign * @new: long value to assign
* *
* If (@v == @old), atomically updates @v to @new with full ordering. * If (@v == @old), atomically updates @v to @new with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_long_cmpxchg() there. * Unsafe to use in noinstr code; use raw_atomic_long_cmpxchg() there.
* *
...@@ -4330,6 +4359,7 @@ atomic_long_cmpxchg(atomic_long_t *v, long old, long new) ...@@ -4330,6 +4359,7 @@ atomic_long_cmpxchg(atomic_long_t *v, long old, long new)
* @new: long value to assign * @new: long value to assign
* *
* If (@v == @old), atomically updates @v to @new with acquire ordering. * If (@v == @old), atomically updates @v to @new with acquire ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_long_cmpxchg_acquire() there. * Unsafe to use in noinstr code; use raw_atomic_long_cmpxchg_acquire() there.
* *
...@@ -4349,6 +4379,7 @@ atomic_long_cmpxchg_acquire(atomic_long_t *v, long old, long new) ...@@ -4349,6 +4379,7 @@ atomic_long_cmpxchg_acquire(atomic_long_t *v, long old, long new)
* @new: long value to assign * @new: long value to assign
* *
* If (@v == @old), atomically updates @v to @new with release ordering. * If (@v == @old), atomically updates @v to @new with release ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_long_cmpxchg_release() there. * Unsafe to use in noinstr code; use raw_atomic_long_cmpxchg_release() there.
* *
...@@ -4369,6 +4400,7 @@ atomic_long_cmpxchg_release(atomic_long_t *v, long old, long new) ...@@ -4369,6 +4400,7 @@ atomic_long_cmpxchg_release(atomic_long_t *v, long old, long new)
* @new: long value to assign * @new: long value to assign
* *
* If (@v == @old), atomically updates @v to @new with relaxed ordering. * If (@v == @old), atomically updates @v to @new with relaxed ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_long_cmpxchg_relaxed() there. * Unsafe to use in noinstr code; use raw_atomic_long_cmpxchg_relaxed() there.
* *
...@@ -4388,7 +4420,8 @@ atomic_long_cmpxchg_relaxed(atomic_long_t *v, long old, long new) ...@@ -4388,7 +4420,8 @@ atomic_long_cmpxchg_relaxed(atomic_long_t *v, long old, long new)
* @new: long value to assign * @new: long value to assign
* *
* If (@v == @old), atomically updates @v to @new with full ordering. * If (@v == @old), atomically updates @v to @new with full 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.
* *
* Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg() there. * Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg() there.
* *
...@@ -4410,7 +4443,8 @@ atomic_long_try_cmpxchg(atomic_long_t *v, long *old, long new) ...@@ -4410,7 +4443,8 @@ atomic_long_try_cmpxchg(atomic_long_t *v, long *old, long new)
* @new: long value to assign * @new: long value to assign
* *
* If (@v == @old), atomically updates @v to @new with acquire ordering. * If (@v == @old), atomically updates @v to @new with acquire 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.
* *
* Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_acquire() there. * Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_acquire() there.
* *
...@@ -4431,7 +4465,8 @@ atomic_long_try_cmpxchg_acquire(atomic_long_t *v, long *old, long new) ...@@ -4431,7 +4465,8 @@ atomic_long_try_cmpxchg_acquire(atomic_long_t *v, long *old, long new)
* @new: long value to assign * @new: long value to assign
* *
* If (@v == @old), atomically updates @v to @new with release ordering. * If (@v == @old), atomically updates @v to @new with release 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.
* *
* Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_release() there. * Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_release() there.
* *
...@@ -4453,7 +4488,8 @@ atomic_long_try_cmpxchg_release(atomic_long_t *v, long *old, long new) ...@@ -4453,7 +4488,8 @@ atomic_long_try_cmpxchg_release(atomic_long_t *v, long *old, long new)
* @new: long value to assign * @new: long value to assign
* *
* If (@v == @old), atomically updates @v to @new with relaxed ordering. * If (@v == @old), atomically updates @v to @new with relaxed 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.
* *
* Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_relaxed() there. * Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_relaxed() there.
* *
...@@ -4603,6 +4639,7 @@ atomic_long_add_negative_relaxed(long i, atomic_long_t *v) ...@@ -4603,6 +4639,7 @@ atomic_long_add_negative_relaxed(long i, atomic_long_t *v)
* @u: long value to compare with * @u: long value to compare with
* *
* If (@v != @u), atomically updates @v to (@v + @a) with full ordering. * If (@v != @u), atomically updates @v to (@v + @a) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_long_fetch_add_unless() there. * Unsafe to use in noinstr code; use raw_atomic_long_fetch_add_unless() there.
* *
...@@ -4623,6 +4660,7 @@ atomic_long_fetch_add_unless(atomic_long_t *v, long a, long u) ...@@ -4623,6 +4660,7 @@ atomic_long_fetch_add_unless(atomic_long_t *v, long a, long u)
* @u: long value to compare with * @u: long value to compare with
* *
* If (@v != @u), atomically updates @v to (@v + @a) with full ordering. * If (@v != @u), atomically updates @v to (@v + @a) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_long_add_unless() there. * Unsafe to use in noinstr code; use raw_atomic_long_add_unless() there.
* *
...@@ -4641,6 +4679,7 @@ atomic_long_add_unless(atomic_long_t *v, long a, long u) ...@@ -4641,6 +4679,7 @@ atomic_long_add_unless(atomic_long_t *v, long a, long u)
* @v: pointer to atomic_long_t * @v: pointer to atomic_long_t
* *
* If (@v != 0), atomically updates @v to (@v + 1) with full ordering. * If (@v != 0), atomically updates @v to (@v + 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_long_inc_not_zero() there. * Unsafe to use in noinstr code; use raw_atomic_long_inc_not_zero() there.
* *
...@@ -4659,6 +4698,7 @@ atomic_long_inc_not_zero(atomic_long_t *v) ...@@ -4659,6 +4698,7 @@ atomic_long_inc_not_zero(atomic_long_t *v)
* @v: pointer to atomic_long_t * @v: pointer to atomic_long_t
* *
* If (@v >= 0), atomically updates @v to (@v + 1) with full ordering. * If (@v >= 0), atomically updates @v to (@v + 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_long_inc_unless_negative() there. * Unsafe to use in noinstr code; use raw_atomic_long_inc_unless_negative() there.
* *
...@@ -4677,6 +4717,7 @@ atomic_long_inc_unless_negative(atomic_long_t *v) ...@@ -4677,6 +4717,7 @@ atomic_long_inc_unless_negative(atomic_long_t *v)
* @v: pointer to atomic_long_t * @v: pointer to atomic_long_t
* *
* If (@v <= 0), atomically updates @v to (@v - 1) with full ordering. * If (@v <= 0), atomically updates @v to (@v - 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_long_dec_unless_positive() there. * Unsafe to use in noinstr code; use raw_atomic_long_dec_unless_positive() there.
* *
...@@ -4695,6 +4736,7 @@ atomic_long_dec_unless_positive(atomic_long_t *v) ...@@ -4695,6 +4736,7 @@ atomic_long_dec_unless_positive(atomic_long_t *v)
* @v: pointer to atomic_long_t * @v: pointer to atomic_long_t
* *
* If (@v > 0), atomically updates @v to (@v - 1) with full ordering. * If (@v > 0), atomically updates @v to (@v - 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Unsafe to use in noinstr code; use raw_atomic_long_dec_if_positive() there. * Unsafe to use in noinstr code; use raw_atomic_long_dec_if_positive() there.
* *
...@@ -5008,4 +5050,4 @@ atomic_long_dec_if_positive(atomic_long_t *v) ...@@ -5008,4 +5050,4 @@ atomic_long_dec_if_positive(atomic_long_t *v)
#endif /* _LINUX_ATOMIC_INSTRUMENTED_H */ #endif /* _LINUX_ATOMIC_INSTRUMENTED_H */
// 2cc4bc990fef44d3836ec108f11b610f3f438184 // ce5b65e0f1f8a276268b667194581d24bed219d4
...@@ -1352,6 +1352,7 @@ raw_atomic_long_xchg_relaxed(atomic_long_t *v, long new) ...@@ -1352,6 +1352,7 @@ raw_atomic_long_xchg_relaxed(atomic_long_t *v, long new)
* @new: long value to assign * @new: long value to assign
* *
* If (@v == @old), atomically updates @v to @new with full ordering. * If (@v == @old), atomically updates @v to @new with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_long_cmpxchg() elsewhere. * Safe to use in noinstr code; prefer atomic_long_cmpxchg() elsewhere.
* *
...@@ -1374,6 +1375,7 @@ raw_atomic_long_cmpxchg(atomic_long_t *v, long old, long new) ...@@ -1374,6 +1375,7 @@ raw_atomic_long_cmpxchg(atomic_long_t *v, long old, long new)
* @new: long value to assign * @new: long value to assign
* *
* If (@v == @old), atomically updates @v to @new with acquire ordering. * If (@v == @old), atomically updates @v to @new with acquire ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_long_cmpxchg_acquire() elsewhere. * Safe to use in noinstr code; prefer atomic_long_cmpxchg_acquire() elsewhere.
* *
...@@ -1396,6 +1398,7 @@ raw_atomic_long_cmpxchg_acquire(atomic_long_t *v, long old, long new) ...@@ -1396,6 +1398,7 @@ raw_atomic_long_cmpxchg_acquire(atomic_long_t *v, long old, long new)
* @new: long value to assign * @new: long value to assign
* *
* If (@v == @old), atomically updates @v to @new with release ordering. * If (@v == @old), atomically updates @v to @new with release ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_long_cmpxchg_release() elsewhere. * Safe to use in noinstr code; prefer atomic_long_cmpxchg_release() elsewhere.
* *
...@@ -1418,6 +1421,7 @@ raw_atomic_long_cmpxchg_release(atomic_long_t *v, long old, long new) ...@@ -1418,6 +1421,7 @@ raw_atomic_long_cmpxchg_release(atomic_long_t *v, long old, long new)
* @new: long value to assign * @new: long value to assign
* *
* If (@v == @old), atomically updates @v to @new with relaxed ordering. * If (@v == @old), atomically updates @v to @new with relaxed ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_long_cmpxchg_relaxed() elsewhere. * Safe to use in noinstr code; prefer atomic_long_cmpxchg_relaxed() elsewhere.
* *
...@@ -1440,7 +1444,8 @@ raw_atomic_long_cmpxchg_relaxed(atomic_long_t *v, long old, long new) ...@@ -1440,7 +1444,8 @@ raw_atomic_long_cmpxchg_relaxed(atomic_long_t *v, long old, long new)
* @new: long value to assign * @new: long value to assign
* *
* If (@v == @old), atomically updates @v to @new with full ordering. * If (@v == @old), atomically updates @v to @new with full 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.
* *
* Safe to use in noinstr code; prefer atomic_long_try_cmpxchg() elsewhere. * Safe to use in noinstr code; prefer atomic_long_try_cmpxchg() elsewhere.
* *
...@@ -1463,7 +1468,8 @@ raw_atomic_long_try_cmpxchg(atomic_long_t *v, long *old, long new) ...@@ -1463,7 +1468,8 @@ raw_atomic_long_try_cmpxchg(atomic_long_t *v, long *old, long new)
* @new: long value to assign * @new: long value to assign
* *
* If (@v == @old), atomically updates @v to @new with acquire ordering. * If (@v == @old), atomically updates @v to @new with acquire 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.
* *
* Safe to use in noinstr code; prefer atomic_long_try_cmpxchg_acquire() elsewhere. * Safe to use in noinstr code; prefer atomic_long_try_cmpxchg_acquire() elsewhere.
* *
...@@ -1486,7 +1492,8 @@ raw_atomic_long_try_cmpxchg_acquire(atomic_long_t *v, long *old, long new) ...@@ -1486,7 +1492,8 @@ raw_atomic_long_try_cmpxchg_acquire(atomic_long_t *v, long *old, long new)
* @new: long value to assign * @new: long value to assign
* *
* If (@v == @old), atomically updates @v to @new with release ordering. * If (@v == @old), atomically updates @v to @new with release 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.
* *
* Safe to use in noinstr code; prefer atomic_long_try_cmpxchg_release() elsewhere. * Safe to use in noinstr code; prefer atomic_long_try_cmpxchg_release() elsewhere.
* *
...@@ -1509,7 +1516,8 @@ raw_atomic_long_try_cmpxchg_release(atomic_long_t *v, long *old, long new) ...@@ -1509,7 +1516,8 @@ raw_atomic_long_try_cmpxchg_release(atomic_long_t *v, long *old, long new)
* @new: long value to assign * @new: long value to assign
* *
* If (@v == @old), atomically updates @v to @new with relaxed ordering. * If (@v == @old), atomically updates @v to @new with relaxed 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.
* *
* Safe to use in noinstr code; prefer atomic_long_try_cmpxchg_relaxed() elsewhere. * Safe to use in noinstr code; prefer atomic_long_try_cmpxchg_relaxed() elsewhere.
* *
...@@ -1677,6 +1685,7 @@ raw_atomic_long_add_negative_relaxed(long i, atomic_long_t *v) ...@@ -1677,6 +1685,7 @@ raw_atomic_long_add_negative_relaxed(long i, atomic_long_t *v)
* @u: long value to compare with * @u: long value to compare with
* *
* If (@v != @u), atomically updates @v to (@v + @a) with full ordering. * If (@v != @u), atomically updates @v to (@v + @a) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_long_fetch_add_unless() elsewhere. * Safe to use in noinstr code; prefer atomic_long_fetch_add_unless() elsewhere.
* *
...@@ -1699,6 +1708,7 @@ raw_atomic_long_fetch_add_unless(atomic_long_t *v, long a, long u) ...@@ -1699,6 +1708,7 @@ raw_atomic_long_fetch_add_unless(atomic_long_t *v, long a, long u)
* @u: long value to compare with * @u: long value to compare with
* *
* If (@v != @u), atomically updates @v to (@v + @a) with full ordering. * If (@v != @u), atomically updates @v to (@v + @a) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_long_add_unless() elsewhere. * Safe to use in noinstr code; prefer atomic_long_add_unless() elsewhere.
* *
...@@ -1719,6 +1729,7 @@ raw_atomic_long_add_unless(atomic_long_t *v, long a, long u) ...@@ -1719,6 +1729,7 @@ raw_atomic_long_add_unless(atomic_long_t *v, long a, long u)
* @v: pointer to atomic_long_t * @v: pointer to atomic_long_t
* *
* If (@v != 0), atomically updates @v to (@v + 1) with full ordering. * If (@v != 0), atomically updates @v to (@v + 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_long_inc_not_zero() elsewhere. * Safe to use in noinstr code; prefer atomic_long_inc_not_zero() elsewhere.
* *
...@@ -1739,6 +1750,7 @@ raw_atomic_long_inc_not_zero(atomic_long_t *v) ...@@ -1739,6 +1750,7 @@ raw_atomic_long_inc_not_zero(atomic_long_t *v)
* @v: pointer to atomic_long_t * @v: pointer to atomic_long_t
* *
* If (@v >= 0), atomically updates @v to (@v + 1) with full ordering. * If (@v >= 0), atomically updates @v to (@v + 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_long_inc_unless_negative() elsewhere. * Safe to use in noinstr code; prefer atomic_long_inc_unless_negative() elsewhere.
* *
...@@ -1759,6 +1771,7 @@ raw_atomic_long_inc_unless_negative(atomic_long_t *v) ...@@ -1759,6 +1771,7 @@ raw_atomic_long_inc_unless_negative(atomic_long_t *v)
* @v: pointer to atomic_long_t * @v: pointer to atomic_long_t
* *
* If (@v <= 0), atomically updates @v to (@v - 1) with full ordering. * If (@v <= 0), atomically updates @v to (@v - 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_long_dec_unless_positive() elsewhere. * Safe to use in noinstr code; prefer atomic_long_dec_unless_positive() elsewhere.
* *
...@@ -1779,6 +1792,7 @@ raw_atomic_long_dec_unless_positive(atomic_long_t *v) ...@@ -1779,6 +1792,7 @@ raw_atomic_long_dec_unless_positive(atomic_long_t *v)
* @v: pointer to atomic_long_t * @v: pointer to atomic_long_t
* *
* If (@v > 0), atomically updates @v to (@v - 1) with full ordering. * If (@v > 0), atomically updates @v to (@v - 1) with full ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* Safe to use in noinstr code; prefer atomic_long_dec_if_positive() elsewhere. * Safe to use in noinstr code; prefer atomic_long_dec_if_positive() elsewhere.
* *
...@@ -1795,4 +1809,4 @@ raw_atomic_long_dec_if_positive(atomic_long_t *v) ...@@ -1795,4 +1809,4 @@ raw_atomic_long_dec_if_positive(atomic_long_t *v)
} }
#endif /* _LINUX_ATOMIC_LONG_H */ #endif /* _LINUX_ATOMIC_LONG_H */
// 4ef23f98c73cff96d239896175fd26b10b88899e // 1c4a26fc77f345342953770ebe3c4d08e7ce2f9a
...@@ -10,6 +10,7 @@ cat <<EOF ...@@ -10,6 +10,7 @@ cat <<EOF
* @u: ${int} value to compare with * @u: ${int} value to compare with
* *
* If (@v != @u), atomically updates @v to (@v + @a) with ${desc_order} ordering. * If (@v != @u), atomically updates @v to (@v + @a) with ${desc_order} ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* ${desc_noinstr} * ${desc_noinstr}
* *
......
...@@ -6,6 +6,7 @@ cat <<EOF ...@@ -6,6 +6,7 @@ cat <<EOF
* @new: ${int} value to assign * @new: ${int} value to assign
* *
* If (@v == @old), atomically updates @v to @new with ${desc_order} ordering. * If (@v == @old), atomically updates @v to @new with ${desc_order} ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* ${desc_noinstr} * ${desc_noinstr}
* *
......
...@@ -4,6 +4,7 @@ cat <<EOF ...@@ -4,6 +4,7 @@ cat <<EOF
* @v: pointer to ${atomic}_t * @v: pointer to ${atomic}_t
* *
* If (@v > 0), atomically updates @v to (@v - 1) with ${desc_order} ordering. * If (@v > 0), atomically updates @v to (@v - 1) with ${desc_order} ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* ${desc_noinstr} * ${desc_noinstr}
* *
......
...@@ -4,6 +4,7 @@ cat <<EOF ...@@ -4,6 +4,7 @@ cat <<EOF
* @v: pointer to ${atomic}_t * @v: pointer to ${atomic}_t
* *
* If (@v <= 0), atomically updates @v to (@v - 1) with ${desc_order} ordering. * If (@v <= 0), atomically updates @v to (@v - 1) with ${desc_order} ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* ${desc_noinstr} * ${desc_noinstr}
* *
......
...@@ -4,6 +4,7 @@ cat <<EOF ...@@ -4,6 +4,7 @@ cat <<EOF
* @v: pointer to ${atomic}_t * @v: pointer to ${atomic}_t
* *
* If (@v != 0), atomically updates @v to (@v + 1) with ${desc_order} ordering. * If (@v != 0), atomically updates @v to (@v + 1) with ${desc_order} ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* ${desc_noinstr} * ${desc_noinstr}
* *
......
...@@ -4,6 +4,7 @@ cat <<EOF ...@@ -4,6 +4,7 @@ cat <<EOF
* @v: pointer to ${atomic}_t * @v: pointer to ${atomic}_t
* *
* If (@v >= 0), atomically updates @v to (@v + 1) with ${desc_order} ordering. * If (@v >= 0), atomically updates @v to (@v + 1) with ${desc_order} ordering.
* Otherwise, @v is not modified and relaxed ordering is provided.
* *
* ${desc_noinstr} * ${desc_noinstr}
* *
......
...@@ -6,7 +6,8 @@ cat <<EOF ...@@ -6,7 +6,8 @@ cat <<EOF
* @new: ${int} value to assign * @new: ${int} value to assign
* *
* If (@v == @old), atomically updates @v to @new with ${desc_order} ordering. * 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} * ${desc_noinstr}
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment