Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

locking/atomic: sparc: add preprocessor symbols

Some atomics can be implemented in several different ways, e.g.
FULL/ACQUIRE/RELEASE ordered atomics can be implemented in terms of
RELAXED atomics, and ACQUIRE/RELEASE/RELAXED can be implemented in terms
of FULL ordered atomics. Other atomics are optional, and don't exist in
some configurations (e.g. not all architectures implement the 128-bit
cmpxchg ops).

Subsequent patches will require that architectures define a preprocessor
symbol for any atomic (or ordering variant) which is optional. This will
make the fallback ifdeffery more robust, and simplify future changes.

Add the required definitions to arch/sparc.

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-12-mark.rutland@arm.com

authored by

Mark Rutland and committed by
Peter Zijlstra
358c449a 770345ad

+32 -2
+14 -2
arch/sparc/include/asm/atomic_32.h
··· 19 19 #include <asm-generic/atomic64.h> 20 20 21 21 int arch_atomic_add_return(int, atomic_t *); 22 + #define arch_atomic_add_return arch_atomic_add_return 23 + 22 24 int arch_atomic_fetch_add(int, atomic_t *); 25 + #define arch_atomic_fetch_add arch_atomic_fetch_add 26 + 23 27 int arch_atomic_fetch_and(int, atomic_t *); 28 + #define arch_atomic_fetch_and arch_atomic_fetch_and 29 + 24 30 int arch_atomic_fetch_or(int, atomic_t *); 31 + #define arch_atomic_fetch_or arch_atomic_fetch_or 32 + 25 33 int arch_atomic_fetch_xor(int, atomic_t *); 34 + #define arch_atomic_fetch_xor arch_atomic_fetch_xor 35 + 26 36 int arch_atomic_cmpxchg(atomic_t *, int, int); 27 37 #define arch_atomic_cmpxchg arch_atomic_cmpxchg 38 + 28 39 int arch_atomic_xchg(atomic_t *, int); 29 40 #define arch_atomic_xchg arch_atomic_xchg 30 - int arch_atomic_fetch_add_unless(atomic_t *, int, int); 31 - void arch_atomic_set(atomic_t *, int); 32 41 42 + int arch_atomic_fetch_add_unless(atomic_t *, int, int); 33 43 #define arch_atomic_fetch_add_unless arch_atomic_fetch_add_unless 44 + 45 + void arch_atomic_set(atomic_t *, int); 34 46 35 47 #define arch_atomic_set_release(v, i) arch_atomic_set((v), (i)) 36 48
+18
arch/sparc/include/asm/atomic_64.h
··· 37 37 ATOMIC_OPS(add) 38 38 ATOMIC_OPS(sub) 39 39 40 + #define arch_atomic_add_return arch_atomic_add_return 41 + #define arch_atomic_sub_return arch_atomic_sub_return 42 + #define arch_atomic_fetch_add arch_atomic_fetch_add 43 + #define arch_atomic_fetch_sub arch_atomic_fetch_sub 44 + 45 + #define arch_atomic64_add_return arch_atomic64_add_return 46 + #define arch_atomic64_sub_return arch_atomic64_sub_return 47 + #define arch_atomic64_fetch_add arch_atomic64_fetch_add 48 + #define arch_atomic64_fetch_sub arch_atomic64_fetch_sub 49 + 40 50 #undef ATOMIC_OPS 41 51 #define ATOMIC_OPS(op) ATOMIC_OP(op) ATOMIC_FETCH_OP(op) 42 52 43 53 ATOMIC_OPS(and) 44 54 ATOMIC_OPS(or) 45 55 ATOMIC_OPS(xor) 56 + 57 + #define arch_atomic_fetch_and arch_atomic_fetch_and 58 + #define arch_atomic_fetch_or arch_atomic_fetch_or 59 + #define arch_atomic_fetch_xor arch_atomic_fetch_xor 60 + 61 + #define arch_atomic64_fetch_and arch_atomic64_fetch_and 62 + #define arch_atomic64_fetch_or arch_atomic64_fetch_or 63 + #define arch_atomic64_fetch_xor arch_atomic64_fetch_xor 46 64 47 65 #undef ATOMIC_OPS 48 66 #undef ATOMIC_FETCH_OP