]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
locking/atomic: hexagon: remove redundant arch_atomic_cmpxchg
authorMark Rutland <mark.rutland@arm.com>
Mon, 5 Jun 2023 07:01:00 +0000 (08:01 +0100)
committerPeter Zijlstra <peterz@infradead.org>
Mon, 5 Jun 2023 07:57:13 +0000 (09:57 +0200)
Hexagon's implementation of arch_atomic_cmpxchg() is identical to its
implementation of arch_cmpxchg(). Have it define arch_atomic_cmpxchg()
in terms of arch_cmpxchg(), matching what it does for arch_atomic_xchg()
and arch_xchg().

At the same time, remove the kerneldoc comments for hexagon's
arch_atomic_xchg() and arch_atomic_cmpxchg(). The arch_atomic_*()
namespace is shared by all architectures and the API should be
documented centrally, and the comments aren't all that helpful as-is.

There should be no functional change as a result of this patch.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/20230605070124.3741859-4-mark.rutland@arm.com
arch/hexagon/include/asm/atomic.h

index 6e94f8d04146f4e0e2b0de37544181556e08f4d6..738857e10d6ec4902f6d12dc0a53a21e0cec8d47 100644 (file)
@@ -36,49 +36,11 @@ static inline void arch_atomic_set(atomic_t *v, int new)
  */
 #define arch_atomic_read(v)            READ_ONCE((v)->counter)
 
-/**
- * arch_atomic_xchg - atomic
- * @v: pointer to memory to change
- * @new: new value (technically passed in a register -- see xchg)
- */
-#define arch_atomic_xchg(v, new)       (arch_xchg(&((v)->counter), (new)))
-
-
-/**
- * arch_atomic_cmpxchg - atomic compare-and-exchange values
- * @v: pointer to value to change
- * @old:  desired old value to match
- * @new:  new value to put in
- *
- * Parameters are then pointer, value-in-register, value-in-register,
- * and the output is the old value.
- *
- * Apparently this is complicated for archs that don't support
- * the memw_locked like we do (or it's broken or whatever).
- *
- * Kind of the lynchpin of the rest of the generically defined routines.
- * Remember V2 had that bug with dotnew predicate set by memw_locked.
- *
- * "old" is "expected" old val, __oldval is actual old value
- */
-static inline int arch_atomic_cmpxchg(atomic_t *v, int old, int new)
-{
-       int __oldval;
+#define arch_atomic_xchg(v, new)                                       \
+       (arch_xchg(&((v)->counter), (new)))
 
-       asm volatile(
-               "1:     %0 = memw_locked(%1);\n"
-               "       { P0 = cmp.eq(%0,%2);\n"
-               "         if (!P0.new) jump:nt 2f; }\n"
-               "       memw_locked(%1,P0) = %3;\n"
-               "       if (!P0) jump 1b;\n"
-               "2:\n"
-               : "=&r" (__oldval)
-               : "r" (&v->counter), "r" (old), "r" (new)
-               : "memory", "p0"
-       );
-
-       return __oldval;
-}
+#define arch_atomic_cmpxchg(v, old, new)                               \
+       (arch_cmpxchg(&((v)->counter), (old), (new)))
 
 #define ATOMIC_OP(op)                                                  \
 static inline void arch_atomic_##op(int i, atomic_t *v)                        \