riscv: atomic: Using ARCH_ATOMIC in asm/atomic.h
[email protected]
maintainerPATCH 1/1 riscv: atomic: Using ARCH_ATOMIC in asm/atomic.h
From: Guo Ren <[email protected]>
The linux/atomic-arch-fallback.h has been there for a while, but only x86 & arm64 support it. Let's make riscv follow the linux/arch/* development trendy and make the codes more readable and maintainable.
This patch also cleanup some codes:
- Add atomic_andnot_* operation
- Using amoswap.w.rl & amoswap.w.aq instructions in xchg
- Remove cmpxchg_acquire/release unnecessary optimization
--- arch/riscv/include/asm/atomic.h | 230 +++++++++++++++------------------------ arch/riscv/include/asm/cmpxchg.h | 199 ++------------------------------- 2 files changed, 99 insertions(+), 330 deletions(-)
arch/riscv/include/asm/atomic.h +90 -140
@@ -8,13 +8,8 @@#ifndef _ASM_RISCV_ATOMIC_H#define _ASM_RISCV_ATOMIC_H -#ifdef CONFIG_GENERIC_ATOMIC64 -# include <asm-generic/atomic64.h> -#else -# if (__riscv_xlen <64 ) -# error "64-bit atomics require XLEN to be at least 64" -# endif -#endif +#include <linux/compiler.h> +#include <linux/types.h> #include <asm/cmpxchg.h> #include <asm/barrier.h>
@@ -25,25 +20,13 @@#define __atomic_release_fence () \ __asm__ __volatile__(RISCV_RELEASE_BARRIER "" ::: "memory"); -static __always_inline int atomic_read(const atomic_t *v) -{ -return READ_ONCE (v->counter); -} -static __always_inline void atomic_set(atomic_t *v, int i) -{ -WRITE_ONCE (v->counter, i); -} +#define arch_atomic_read (v) __READ_ONCE((v)->counter) +#define arch_atomic_set (v, i) __WRITE_ONCE(((v)->counter), (i))#ifndef CONFIG_GENERIC_ATOMIC64 -#define ATOMIC64_INIT (i) { (i) } -static __always_inline s64 atomic64_read(const atomic64_t *v) -{ -return READ_ONCE (v->counter); -} -static __always_inline void atomic64_set(atomic64_t *v, s64 i) -{ -WRITE_ONCE (v->counter, i); -} +#define ATOMIC64_INIT ATOMIC_INIT +#define arch_atomic64_read arch_atomic_read +#define arch_atomic64_set arch_atomic_set#endif /*
@@ -53,7 +36,7 @@ static __always_inline void atomic64_set(atomic64_t *v, s64 i)*/ #define ATOMIC_OP (op, asm_op,I , asm_type, c_type, prefix) \ static __always_inline \ -void atomic##prefix##_##op(c_type i, atomic##prefix##_t *v) \ +void arch_atomic##prefix##_##op(c_type i, atomic##prefix##_t *v) \ { \ __asm__ __volatile__ ( \ " amo" #asm_op "." #asm_type " zero, %1, %0" \
@@ -76,6 +59,12 @@ ATOMIC_OPS(sub, add, -i) ATOMIC_OPS(and, and, i) ATOMIC_OPS( or, or, i) ATOMIC_OPS(xor, xor, i) +ATOMIC_OPS(andnot, and, -i) + +#define arch_atomic_andnot arch_atomic_andnot +#ifndef CONFIG_GENERIC_ATOMIC64 +#define arch_atomic64_andnot arch_atomic64_andnot +#endif #undef ATOMIC_OP#undef ATOMIC_OPS
@@ -87,7 +76,7 @@ ATOMIC_OPS(xor, xor, i)*/ #define ATOMIC_FETCH_OP (op, asm_op,I , asm_type, c_type, prefix) \ static __always_inline \ -c_type atomic##prefix##_fetch_##op##_relaxed(c_type i, \ +c_type arch_atomic##prefix##_fetch_##op##_relaxed(c_type i, \ atomic##prefix##_t *v) \ { \ register c_type ret; \
@@ -99,7 +88,7 @@ c_type atomic##prefix##_fetch_##op##_relaxed(c_type i, \return ret; \ } \ static __always_inline \ -c_type atomic##prefix##_fetch_##op(c_type i, atomic##prefix##_t *v) \ +c_type arch_atomic##prefix##_fetch_##op(c_type i, atomic##prefix##_t *v)\ { \ register c_type ret; \ __asm__ __volatile__ ( \
@@ -112,15 +101,16 @@ c_type atomic##prefix##_fetch_##op(c_type i, atomic##prefix##_t *v) \#define ATOMIC_OP_RETURN (op, asm_op, c_op,I , asm_type, c_type, prefix) \ static __always_inline \ -c_type atomic##prefix##_##op##_return_relaxed(c_type i, \ +c_type arch_atomic##prefix##_##op##_return_relaxed(c_type i, \ atomic##prefix##_t *v) \ { \ - return atomic##prefix##_fetch_##op##_relaxed(i, v) c_op I; \ + return arch_atomic##prefix##_fetch_##op##_relaxed(i, v) c_op I; \ } \ static __always_inline \ -c_type atomic##prefix##_##op##_return(c_type i, atomic##prefix##_t *v) \ +c_type arch_atomic##prefix##_##op##_return(c_type i, \ + atomic##prefix##_t *v) \ { \ - return atomic##prefix##_fetch_##op(i, v) c_op I; \ + return arch_atomic##prefix##_fetch_##op(i, v) c_op I; \ }#ifdef CONFIG_GENERIC_ATOMIC64
@@ -138,26 +128,26 @@ c_type atomic##prefix##_##op##_return(c_type i, atomic##prefix##_t *v) \ ATOMIC_OPS(add, add, +, i) ATOMIC_OPS(sub, add, +, -i) -#define atomic_add_return_relaxed atomic_add_return_relaxed -#define atomic_sub_return_relaxed atomic_sub_return_relaxed -#define atomic_add_return atomic_add_return -#define atomic_sub_return atomic_sub_return +#define arch_atomic_add_return_relaxed arch_atomic_add_return_relaxed +#define arch_atomic_sub_return_relaxed arch_atomic_sub_return_relaxed +#define arch_atomic_add_return arch_atomic_add_return +#define arch_atomic_sub_return arch_atomic_sub_return -#define atomic_fetch_add_relaxed atomic_fetch_add_relaxed -#define atomic_fetch_sub_relaxed atomic_fetch_sub_relaxed -#define atomic_fetch_add atomic_fetch_add -#define atomic_fetch_sub atomic_fetch_sub +#define arch_atomic_fetch_add_relaxed arch_atomic_fetch_add_relaxed +#define arch_atomic_fetch_sub_relaxed arch_atomic_fetch_sub_relaxed +#define arch_atomic_fetch_add arch_atomic_fetch_add +#define arch_atomic_fetch_sub arch_atomic_fetch_sub#ifndef CONFIG_GENERIC_ATOMIC64 -#define atomic64_add_return_relaxed atomic64_add_return_relaxed -#define atomic64_sub_return_relaxed atomic64_sub_return_relaxed -#define atomic64_add_return atomic64_add_return -#define atomic64_sub_return atomic64_sub_return - -#define atomic64_fetch_add_relaxed atomic64_fetch_add_relaxed -#define atomic64_fetch_sub_relaxed atomic64_fetch_sub_relaxed -#define atomic64_fetch_add atomic64_fetch_add -#define atomic64_fetch_sub atomic64_fetch_sub +#define arch_atomic64_add_return_relaxed arch_atomic64_add_return_relaxed +#define arch_atomic64_sub_return_relaxed arch_atomic64_sub_return_relaxed +#define arch_atomic64_add_return arch_atomic64_add_return +#define arch_atomic64_sub_return arch_atomic64_sub_return + +#define arch_atomic64_fetch_add_relaxed arch_atomic64_fetch_add_relaxed +#define arch_atomic64_fetch_sub_relaxed arch_atomic64_fetch_sub_relaxed +#define arch_atomic64_fetch_add arch_atomic64_fetch_add +#define arch_atomic64_fetch_sub arch_atomic64_fetch_sub#endif #undef ATOMIC_OPS
@@ -172,23 +162,28 @@ ATOMIC_OPS(sub, add, +, -i)#endif ATOMIC_OPS(and, and, i) +ATOMIC_OPS(andnot, and, -i) ATOMIC_OPS( or, or, i) ATOMIC_OPS(xor, xor, i) -#define atomic_fetch_and_relaxed atomic_fetch_and_relaxed -#define atomic_fetch_or_relaxed atomic_fetch_or_relaxed -#define atomic_fetch_xor_relaxed atomic_fetch_xor_relaxed -#define atomic_fetch_and atomic_fetch_and -#define atomic_fetch_or atomic_fetch_or -#define atomic_fetch_xor atomic_fetch_xor +#define arch_atomic_fetch_and_relaxed arch_atomic_fetch_and_relaxed +#define arch_atomic_fetch_andnot_relaxed arch_atomic_fetch_andnot_relaxed +#define arch_atomic_fetch_or_relaxed arch_atomic_fetch_or_relaxed +#define arch_atomic_fetch_xor_relaxed arch_atomic_fetch_xor_relaxed +#define arch_atomic_fetch_and arch_atomic_fetch_and +#define arch_atomic_fetch_andnot arch_atomic_fetch_andnot +#define arch_atomic_fetch_or arch_atomic_fetch_or +#define arch_atomic_fetch_xor arch_atomic_fetch_xor#ifndef CONFIG_GENERIC_ATOMIC64 -#define atomic64_fetch_and_relaxed atomic64_fetch_and_relaxed -#define atomic64_fetch_or_relaxed atomic64_fetch_or_relaxed -#define atomic64_fetch_xor_relaxed atomic64_fetch_xor_relaxed -#define atomic64_fetch_and atomic64_fetch_and -#define atomic64_fetch_or atomic64_fetch_or -#define atomic64_fetch_xor atomic64_fetch_xor +#define arch_atomic64_fetch_and_relaxed arch_atomic64_fetch_and_relaxed +#define arch_atomic64_fetch_andnot_relaxed arch_atomic64_fetch_andnot_relaxed +#define arch_atomic64_fetch_or_relaxed arch_atomic64_fetch_or_relaxed +#define arch_atomic64_fetch_xor_relaxed arch_atomic64_fetch_xor_relaxed +#define arch_atomic64_fetch_and arch_atomic64_fetch_and +#define arch_atomic64_fetch_andnot arch_atomic64_fetch_andnot +#define arch_atomic64_fetch_or arch_atomic64_fetch_or +#define arch_atomic64_fetch_xor arch_atomic64_fetch_xor#endif #undef ATOMIC_OPS
@@ -197,7 +192,7 @@ ATOMIC_OPS(xor, xor, i)#undef ATOMIC_OP_RETURN/* This is required to provide a full barrier on success. */ -static __always_inline int atomic_fetch_add_unless(atomic_t *v, int a, int u) +static __always_inline int arch_atomic_fetch_add_unless(atomic_t *v, int a, int u) {int prev, rc;
@@ -214,10 +209,10 @@ static __always_inline int atomic_fetch_add_unless(atomic_t *v, int a, int u) : "memory");return prev; } -#define atomic_fetch_add_unless atomic_fetch_add_unless +#define arch_atomic_fetch_add_unless arch_atomic_fetch_add_unless#ifndef CONFIG_GENERIC_ATOMIC64 -static __always_inline s64 atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u) +static __always_inline s64 arch_atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u) {s64 prev;long rc;
@@ -235,82 +230,10 @@ static __always_inline s64 atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u : "memory");return prev; } -#define atomic64_fetch_add_unless atomic64_fetch_add_unless +#define arch_atomic64_fetch_add_unless arch_atomic64_fetch_add_unless#endif -/* -* atomic_{cmp,}xchg is required to have exactly the same ordering semantics as -* {cmp,}xchg and the operations that return, so they need a full barrier. -*/ -#define ATOMIC_OP (c_t, prefix, size) \ -static __always_inline \ -c_t atomic##prefix##_xchg_relaxed(atomic##prefix##_t *v, c_t n) \ -{ \ - return __xchg_relaxed(&(v->counter), n, size); \ -} \ -static __always_inline \ -c_t atomic##prefix##_xchg_acquire(atomic##prefix##_t *v, c_t n) \ -{ \ - return __xchg_acquire(&(v->counter), n, size); \ -} \ -static __always_inline \ -c_t atomic##prefix##_xchg_release(atomic##prefix##_t *v, c_t n) \ -{ \ - return __xchg_release(&(v->counter), n, size); \ -} \ -static __always_inline \ -c_t atomic##prefix##_xchg(atomic##prefix##_t *v, c_t n) \ -{ \ - return __xchg(&(v->counter), n, size); \ -} \ -static __always_inline \ -c_t atomic##prefix##_cmpxchg_relaxed(atomic##prefix##_t *v, \ - c_t o, c_t n) \ -{ \ - return __cmpxchg_relaxed(&(v->counter), o, n, size); \ -} \ -static __always_inline \ -c_t atomic##prefix##_cmpxchg_acquire(atomic##prefix##_t *v, \ - c_t o, c_t n) \ -{ \ - return __cmpxchg_acquire(&(v->counter), o, n, size); \ -} \ -static __always_inline \ -c_t atomic##prefix##_cmpxchg_release(atomic##prefix##_t *v, \ - c_t o, c_t n) \ -{ \ - return __cmpxchg_release(&(v->counter), o, n, size); \ -} \ -static __always_inline \ -c_t atomic##prefix##_cmpxchg(atomic##prefix##_t *v, c_t o, c_t n) \ -{ \ - return __cmpxchg(&(v->counter), o, n, size); \ -} - -#ifdef CONFIG_GENERIC_ATOMIC64 -#define ATOMIC_OPS () \ - ATOMIC_OP(int, , 4) -#else -#define ATOMIC_OPS () \ - ATOMIC_OP(int, , 4) \ - ATOMIC_OP(s64, 64, 8) -#endif - -ATOMIC_OPS() - -#define atomic_xchg_relaxed atomic_xchg_relaxed -#define atomic_xchg_acquire atomic_xchg_acquire -#define atomic_xchg_release atomic_xchg_release -#define atomic_xchg atomic_xchg -#define atomic_cmpxchg_relaxed atomic_cmpxchg_relaxed -#define atomic_cmpxchg_acquire atomic_cmpxchg_acquire -#define atomic_cmpxchg_release atomic_cmpxchg_release -#define atomic_cmpxchg atomic_cmpxchg - -#undef ATOMIC_OPS -#undef ATOMIC_OP - -static __always_inline int atomic_sub_if_positive(atomic_t *v, int offset) +static __always_inline int arch_atomic_sub_if_positive(atomic_t *v, int offset) {int prev, rc;
@@ -327,11 +250,11 @@ static __always_inline int atomic_sub_if_positive(atomic_t *v, int offset) : "memory");return prev - offset; } +#define arch_atomic_dec_if_positive (v) arch_atomic_sub_if_positive(v, 1) -#define atomic_dec_if_positive (v) atomic_sub_if_positive(v, 1)#ifndef CONFIG_GENERIC_ATOMIC64 -static __always_inline s64 atomic64_sub_if_positive(atomic64_t *v, s64 offset) +static __always_inline s64 arch_atomic64_sub_if_positive(atomic64_t *v, s64 offset) {s64 prev;long rc;
@@ -349,8 +272,35 @@ static __always_inline s64 atomic64_sub_if_positive(atomic64_t *v, s64 offset) : "memory");return prev - offset; } +#define arch_atomic64_dec_if_positive (v) arch_atomic64_sub_if_positive(v, 1) +#endif + +#define arch_atomic_xchg_relaxed (v, new) \ + arch_xchg_relaxed(&((v)->counter), (new)) +#define arch_atomic_xchg_acquire (v, new) \ + arch_xchg_acquire(&((v)->counter), (new)) +#define arch_atomic_xchg_release (v, new) \ + arch_xchg_release(&((v)->counter), (new)) +#define arch_atomic_xchg (v, new) \ + arch_xchg(&((v)->counter), (new)) + +#define arch_atomic_cmpxchg_relaxed (v, old, new) \ + arch_cmpxchg_relaxed(&((v)->counter), (old), (new)) +#define arch_atomic_cmpxchg_acquire (v, old, new) \ + arch_cmpxchg_acquire(&((v)->counter), (old), (new)) +#define arch_atomic_cmpxchg_release (v, old, new) \ + arch_cmpxchg_release(&((v)->counter), (old), (new)) +#define arch_atomic_cmpxchg (v, old, new) \ + arch_cmpxchg(&((v)->counter), (old), (new)) -#define atomic64_dec_if_positive (v) atomic64_sub_if_positive(v, 1) +#ifndef CONFIG_GENERIC_ATOMIC64 +#define arch_atomic64_xchg_relaxed arch_atomic_xchg_relaxed +#define arch_atomic64_xchg arch_atomic_xchg + +#define arch_atomic64_cmpxchg_relaxed arch_atomic_cmpxchg_relaxed +#define arch_atomic64_cmpxchg arch_atomic_cmpxchg#endif +#define ARCH_ATOMIC +#endif /* _ASM_RISCV_ATOMIC_H */
arch/riscv/include/asm/cmpxchg.h +9 -190
262 lines not on this page · raw message
Signature · 1 line
2.7.4
Peter Zijlstra
maintainerarch/riscv/include/asm/atomic.h ATOMIC_OPS(sub, add, -i) · line 62
Quoted 7 lines · On Thu, Apr 15, 2021 at 07:39:22AM +0000, [email protected] wrote:
- Add atomic_andnot_* operation
arch/riscv/include/asm/atomic.h +1
-0@@ -76,6 +59,12 @@ ATOMIC_OPS(sub, add, -i) ATOMIC_OPS(and, and, i) ATOMIC_OPS( or, or, i) ATOMIC_OPS(xor, xor, i) +ATOMIC_OPS (andnot, and, -i)
~i, surely.
Guo Ren
maintainerSorry, forgot riscv32. I would fix that.
Quoted 11 lines · Peter Zijlstra
arch/riscv/include/asm/atomic.h ATOMIC_OPS(sub, add, -i) · line 62
Quoted 7 lines · On Thu, Apr 15, 2021 at 07:39:22AM +0000, [email protected] wrote:
- Add atomic_andnot_* operation
arch/riscv/include/asm/atomic.h +1
-0@@ -76,6 +59,12 @@ ATOMIC_OPS(sub, add, -i) ATOMIC_OPS(and, and, i) ATOMIC_OPS( or, or, i) ATOMIC_OPS(xor, xor, i) +ATOMIC_OPS (andnot, and, -i)~i, surely.
Signature · 4 lines
Best Regards Guo Ren ML: https://lore.kernel.org/linux-csky/
Guo Ren
maintainerQuoted 11 lines · Peter Zijlstra
arch/riscv/include/asm/atomic.h ATOMIC_OPS(sub, add, -i) · line 62
Quoted 7 lines · On Thu, Apr 15, 2021 at 07:39:22AM +0000, [email protected] wrote:
- Add atomic_andnot_* operation
arch/riscv/include/asm/atomic.h +1
-0@@ -76,6 +59,12 @@ ATOMIC_OPS(sub, add, -i) ATOMIC_OPS(and, and, i) ATOMIC_OPS( or, or, i) ATOMIC_OPS(xor, xor, i) +ATOMIC_OPS (andnot, and, -i)~i, surely.
Thx for correct me. I'll fix it in the next version patch.
Signature · 4 lines
Best Regards Guo Ren ML: https://lore.kernel.org/linux-csky/
kernel test robot
build botI love your patch! Yet something to improve:
Hi,
I love your patch! Yet something to improve:
[auto build test ERROR on linus/master]
[also build test ERROR on v5.12-rc7 next-20210414]
[If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/guoren-kernel-org/riscv-atomic-Using-ARCH_ATOMIC-in-asm-atomic-h/20210415-154120 base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 7f75285ca572eaabc028cf78c6ab5473d0d160be config: riscv-rv32_defconfig (attached as .config) compiler: riscv32-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/ed440642566d3f024235d309c5b5a19bda62e9e1
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review guoren-kernel-org/riscv-atomic-Using-ARCH_ATOMIC-in-asm-atomic-h/20210415-154120 git checkout ed440642566d3f024235d309c5b5a19bda62e9e1
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=riscv
If you fix the issue, kindly add following tag as appropriate
All error/warnings (new ones prefixed by >>):
In file included from include/linux/atomic.h:81,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/linux/atomic-arch-fallback.h: In function 'arch_atomic64_inc':
>> include/linux/atomic-arch-fallback.h:1447:2: error: implicit declaration of function 'arch_atomic64_add'; did you mean 'arch_atomic_add'? [-Werror=implicit-function-declaration]
1447 | arch_atomic64_add(1, v);
| ^~~~~~~~~~~~~~~~~
| arch_atomic_add
include/linux/atomic-arch-fallback.h: In function 'arch_atomic64_inc_return':
>> include/linux/atomic-arch-fallback.h:1463:9: error: implicit declaration of function 'arch_atomic64_add_return'; did you mean 'arch_atomic_add_return'? [-Werror=implicit-function-declaration]
1463 | return arch_atomic64_add_return(1, v);
| ^~~~~~~~~~~~~~~~~~~~~~~~
| arch_atomic_add_return
include/linux/atomic-arch-fallback.h: In function 'arch_atomic64_fetch_inc':
>> include/linux/atomic-arch-fallback.h:1544:9: error: implicit declaration of function 'arch_atomic64_fetch_add'; did you mean 'arch_atomic_fetch_add'? [-Werror=implicit-function-declaration]
1544 | return arch_atomic64_fetch_add(1, v);
| ^~~~~~~~~~~~~~~~~~~~~~~
| arch_atomic_fetch_add
include/linux/atomic-arch-fallback.h: In function 'arch_atomic64_dec':
>> include/linux/atomic-arch-fallback.h:1618:2: error: implicit declaration of function 'arch_atomic64_sub'; did you mean 'arch_atomic_sub'? [-Werror=implicit-function-declaration]
1618 | arch_atomic64_sub(1, v);
| ^~~~~~~~~~~~~~~~~
| arch_atomic_sub
include/linux/atomic-arch-fallback.h: In function 'arch_atomic64_dec_return':
>> include/linux/atomic-arch-fallback.h:1634:9: error: implicit declaration of function 'arch_atomic64_sub_return'; did you mean 'arch_atomic_sub_return'? [-Werror=implicit-function-declaration]
1634 | return arch_atomic64_sub_return(1, v);
| ^~~~~~~~~~~~~~~~~~~~~~~~
| arch_atomic_sub_return
include/linux/atomic-arch-fallback.h: In function 'arch_atomic64_fetch_dec':
>> include/linux/atomic-arch-fallback.h:1715:9: error: implicit declaration of function 'arch_atomic64_fetch_sub'; did you mean 'arch_atomic_fetch_sub'? [-Werror=implicit-function-declaration]
1715 | return arch_atomic64_fetch_sub(1, v);
| ^~~~~~~~~~~~~~~~~~~~~~~
| arch_atomic_fetch_sub
include/linux/atomic-arch-fallback.h: In function 'arch_atomic64_andnot':
>> include/linux/atomic-arch-fallback.h:1831:2: error: implicit declaration of function 'arch_atomic64_and'; did you mean 'arch_atomic64_inc'? [-Werror=implicit-function-declaration]
1831 | arch_atomic64_and(~i, v);
| ^~~~~~~~~~~~~~~~~
| arch_atomic64_inc
include/linux/atomic-arch-fallback.h: In function 'arch_atomic64_fetch_andnot':
>> include/linux/atomic-arch-fallback.h:1847:9: error: implicit declaration of function 'arch_atomic64_fetch_and'; did you mean 'arch_atomic64_fetch_inc'? [-Werror=implicit-function-declaration]
1847 | return arch_atomic64_fetch_and(~i, v);
| ^~~~~~~~~~~~~~~~~~~~~~~
| arch_atomic64_fetch_inc
include/linux/atomic-arch-fallback.h: In function 'arch_atomic64_try_cmpxchg':
>> include/linux/atomic-arch-fallback.h:2097:6: error: implicit declaration of function 'arch_atomic64_cmpxchg'; did you mean 'arch_atomic_cmpxchg'? [-Werror=implicit-function-declaration]
2097 | r = arch_atomic64_cmpxchg(v, o, new);
| ^~~~~~~~~~~~~~~~~~~~~
| arch_atomic_cmpxchg
include/linux/atomic-arch-fallback.h: In function 'arch_atomic64_fetch_add_unless':
>> include/linux/atomic-arch-fallback.h:2265:10: error: implicit declaration of function 'arch_atomic64_read'; did you mean 'arch_atomic_read'? [-Werror=implicit-function-declaration]
2265 | s64 c = arch_atomic64_read(v);
| ^~~~~~~~~~~~~~~~~~
| arch_atomic_read
In file included from include/linux/atomic.h:82,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/asm-generic/atomic-instrumented.h: At top level:
>> include/asm-generic/atomic-instrumented.h:835:1: error: static declaration of 'atomic64_read' follows non-static declaration
835 | atomic64_read(const atomic64_t *v)
| ^~~~~~~~~~~~~
In file included from include/linux/atomic-arch-fallback.h:1254,
from include/linux/atomic.h:81,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/asm-generic/atomic64.h:18:12: note: previous declaration of 'atomic64_read' was here
18 | extern s64 atomic64_read(const atomic64_t *v);
| ^~~~~~~~~~~~~
In file included from include/linux/atomic.h:82,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
>> include/asm-generic/atomic-instrumented.h:853:1: error: static declaration of 'atomic64_set' follows non-static declaration
853 | atomic64_set(atomic64_t *v, s64 i)
| ^~~~~~~~~~~~
In file included from include/linux/atomic-arch-fallback.h:1254,
from include/linux/atomic.h:81,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/asm-generic/atomic64.h:19:13: note: previous declaration of 'atomic64_set' was here
19 | extern void atomic64_set(atomic64_t *v, s64 i);
| ^~~~~~~~~~~~
In file included from include/linux/atomic.h:82,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/asm-generic/atomic-instrumented.h: In function 'atomic64_set':
>> include/asm-generic/atomic-instrumented.h:856:2: error: implicit declaration of function 'arch_atomic64_set'; did you mean 'arch_atomic64_dec'? [-Werror=implicit-function-declaration]
856 | arch_atomic64_set(v, i);
| ^~~~~~~~~~~~~~~~~
| arch_atomic64_dec
In file included from include/linux/atomic-arch-fallback.h:1254,
from include/linux/atomic.h:81,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/asm-generic/atomic-instrumented.h: At top level:
>> include/asm-generic/atomic64.h:21:49: error: expected declaration specifiers or '...' before '(' token
21 | #define atomic64_set_release(v, i) atomic64_set((v), (i))
| ^
include/asm-generic/atomic-instrumented.h:862:1: note: in expansion of macro 'atomic64_set_release'
862 | atomic64_set_release(atomic64_t *v, s64 i)
| ^~~~~~~~~~~~~~~~~~~~
include/asm-generic/atomic64.h:21:54: error: expected declaration specifiers or '...' before '(' token
21 | #define atomic64_set_release(v, i) atomic64_set((v), (i))
| ^
include/asm-generic/atomic-instrumented.h:862:1: note: in expansion of macro 'atomic64_set_release'
862 | atomic64_set_release(atomic64_t *v, s64 i)
| ^~~~~~~~~~~~~~~~~~~~
In file included from include/linux/atomic.h:82,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
>> include/asm-generic/atomic-instrumented.h:867: warning: "atomic64_set_release" redefined
867 | #define atomic64_set_release atomic64_set_release
|
In file included from include/linux/atomic-arch-fallback.h:1254,
from include/linux/atomic.h:81,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/asm-generic/atomic64.h:21: note: this is the location of the previous definition
21 | #define atomic64_set_release(v, i) atomic64_set((v), (i))
|
In file included from include/linux/atomic.h:82,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
>> include/asm-generic/atomic-instrumented.h:871:1: error: static declaration of 'atomic64_add' follows non-static declaration
871 | atomic64_add(s64 i, atomic64_t *v)
| ^~~~~~~~~~~~
In file included from include/linux/atomic-arch-fallback.h:1254,
from include/linux/atomic.h:81,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/asm-generic/atomic64.h:24:14: note: previous declaration of 'atomic64_add' was here
24 | extern void atomic64_##op(s64 a, atomic64_t *v);
| ^~~~~~~~~
include/asm-generic/atomic64.h:32:26: note: in expansion of macro 'ATOMIC64_OP'
32 | #define ATOMIC64_OPS(op) ATOMIC64_OP(op) ATOMIC64_OP_RETURN(op) ATOMIC64_FETCH_OP(op)
| ^~~~~~~~~~~
include/asm-generic/atomic64.h:34:1: note: in expansion of macro 'ATOMIC64_OPS'
34 | ATOMIC64_OPS(add)
| ^~~~~~~~~~~~
In file included from include/linux/atomic.h:82,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
>> include/asm-generic/atomic-instrumented.h:959:1: error: static declaration of 'atomic64_sub' follows non-static declaration
959 | atomic64_sub(s64 i, atomic64_t *v)
| ^~~~~~~~~~~~
In file included from include/linux/atomic-arch-fallback.h:1254,
from include/linux/atomic.h:81,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/asm-generic/atomic64.h:24:14: note: previous declaration of 'atomic64_sub' was here
24 | extern void atomic64_##op(s64 a, atomic64_t *v);
| ^~~~~~~~~
include/asm-generic/atomic64.h:32:26: note: in expansion of macro 'ATOMIC64_OP'
32 | #define ATOMIC64_OPS(op) ATOMIC64_OP(op) ATOMIC64_OP_RETURN(op) ATOMIC64_FETCH_OP(op)
| ^~~~~~~~~~~
include/asm-generic/atomic64.h:35:1: note: in expansion of macro 'ATOMIC64_OPS'
35 | ATOMIC64_OPS(sub)
| ^~~~~~~~~~~~
In file included from include/linux/atomic.h:82,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
>> include/asm-generic/atomic-instrumented.h:1227:1: error: static declaration of 'atomic64_and' follows non-static declaration
1227 | atomic64_and(s64 i, atomic64_t *v)
| ^~~~~~~~~~~~
In file included from include/linux/atomic-arch-fallback.h:1254,
from include/linux/atomic.h:81,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/asm-generic/atomic64.h:24:14: note: previous declaration of 'atomic64_and' was here
24 | extern void atomic64_##op(s64 a, atomic64_t *v);
| ^~~~~~~~~
include/asm-generic/atomic64.h:38:26: note: in expansion of macro 'ATOMIC64_OP'
38 | #define ATOMIC64_OPS(op) ATOMIC64_OP(op) ATOMIC64_FETCH_OP(op)
| ^~~~~~~~~~~
include/asm-generic/atomic64.h:40:1: note: in expansion of macro 'ATOMIC64_OPS'
40 | ATOMIC64_OPS(and)
| ^~~~~~~~~~~~
In file included from include/linux/atomic.h:82,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
>> include/asm-generic/atomic-instrumented.h:1325:1: error: static declaration of 'atomic64_or' follows non-static declaration
1325 | atomic64_or(s64 i, atomic64_t *v)
| ^~~~~~~~~~~
In file included from include/linux/atomic-arch-fallback.h:1254,
from include/linux/atomic.h:81,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/asm-generic/atomic64.h:24:14: note: previous declaration of 'atomic64_or' was here
24 | extern void atomic64_##op(s64 a, atomic64_t *v);
| ^~~~~~~~~
include/asm-generic/atomic64.h:38:26: note: in expansion of macro 'ATOMIC64_OP'
38 | #define ATOMIC64_OPS(op) ATOMIC64_OP(op) ATOMIC64_FETCH_OP(op)
| ^~~~~~~~~~~
include/asm-generic/atomic64.h:41:1: note: in expansion of macro 'ATOMIC64_OPS'
41 | ATOMIC64_OPS(or)
| ^~~~~~~~~~~~
In file included from include/linux/atomic.h:82,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/asm-generic/atomic-instrumented.h: In function 'atomic64_or':
>> include/asm-generic/atomic-instrumented.h:1328:2: error: implicit declaration of function 'arch_atomic64_or'; did you mean 'arch_atomic_or'? [-Werror=implicit-function-declaration]
1328 | arch_atomic64_or(i, v);
| ^~~~~~~~~~~~~~~~
| arch_atomic_or
In file included from include/linux/atomic.h:81,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/asm-generic/atomic-instrumented.h: In function 'atomic64_fetch_or_acquire':
include/linux/atomic-arch-fallback.h:1918:40: error: implicit declaration of function 'arch_atomic64_fetch_or'; did you mean 'arch_atomic_fetch_or'? [-Werror=implicit-function-declaration]
1918 | #define arch_atomic64_fetch_or_acquire arch_atomic64_fetch_or
| ^~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/atomic-instrumented.h:1347:9: note: in expansion of macro 'arch_atomic64_fetch_or_acquire'
1347 | return arch_atomic64_fetch_or_acquire(i, v);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/atomic.h:82,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/asm-generic/atomic-instrumented.h: At top level:
include/asm-generic/atomic-instrumented.h:1373:1: error: static declaration of 'atomic64_xor' follows non-static declaration
1373 | atomic64_xor(s64 i, atomic64_t *v)
| ^~~~~~~~~~~~
In file included from include/linux/atomic-arch-fallback.h:1254,
from include/linux/atomic.h:81,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/asm-generic/atomic64.h:24:14: note: previous declaration of 'atomic64_xor' was here
24 | extern void atomic64_##op(s64 a, atomic64_t *v);
| ^~~~~~~~~
include/asm-generic/atomic64.h:38:26: note: in expansion of macro 'ATOMIC64_OP'
38 | #define ATOMIC64_OPS(op) ATOMIC64_OP(op) ATOMIC64_FETCH_OP(op)
| ^~~~~~~~~~~
include/asm-generic/atomic64.h:42:1: note: in expansion of macro 'ATOMIC64_OPS'
42 | ATOMIC64_OPS(xor)
| ^~~~~~~~~~~~
In file included from include/linux/atomic.h:82,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/asm-generic/atomic-instrumented.h: In function 'atomic64_xor':
include/asm-generic/atomic-instrumented.h:1376:2: error: implicit declaration of function 'arch_atomic64_xor'; did you mean 'arch_atomic_xor'? [-Werror=implicit-function-declaration]
1376 | arch_atomic64_xor(i, v);
| ^~~~~~~~~~~~~~~~~
| arch_atomic_xor
In file included from include/linux/atomic.h:81,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/asm-generic/atomic-instrumented.h: In function 'atomic64_fetch_xor_acquire':
include/linux/atomic-arch-fallback.h:1960:41: error: implicit declaration of function 'arch_atomic64_fetch_xor'; did you mean 'arch_atomic_fetch_xor'? [-Werror=implicit-function-declaration]
1960 | #define arch_atomic64_fetch_xor_acquire arch_atomic64_fetch_xor
| ^~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/atomic-instrumented.h:1395:9: note: in expansion of macro 'arch_atomic64_fetch_xor_acquire'
1395 | return arch_atomic64_fetch_xor_acquire(i, v);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/atomic-instrumented.h: In function 'atomic64_xchg_acquire':
include/linux/atomic-arch-fallback.h:2002:36: error: implicit declaration of function 'arch_atomic64_xchg'; did you mean 'arch_atomic_xchg'? [-Werror=implicit-function-declaration]
2002 | #define arch_atomic64_xchg_acquire arch_atomic64_xchg
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/atomic-instrumented.h:1435:9: note: in expansion of macro 'arch_atomic64_xchg_acquire'
1435 | return arch_atomic64_xchg_acquire(v, i);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/atomic-arch-fallback.h:1254,
from include/linux/atomic.h:81,
from include/linux/rcupdate.h:25,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from arch/riscv/kernel/asm-offsets.c:10:
include/asm-generic/atomic-instrumented.h: At top level:
include/asm-generic/atomic64.h:54:35: error: static declaration of 'atomic64_fetch_add_unless' follows non-static declaration
54 | #define atomic64_fetch_add_unless atomic64_fetch_add_unless
| ^~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/atomic-instrumented.h:1586:1: note: in expansion of macro 'atomic64_fetch_add_unless'
1586 | atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u)
| ^~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/atomic64.h:53:12: note: previous declaration of 'atomic64_fetch_add_unless' was here
53 | extern s64 atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u);
| ^~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/atomic64.h:50:34: error: static declaration of 'atomic64_dec_if_positive' follows non-static declaration
50 | #define atomic64_dec_if_positive atomic64_dec_if_positive
| ^~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/atomic-instrumented.h:1636:1: note: in expansion of macro 'atomic64_dec_if_positive'
1636 | atomic64_dec_if_positive(atomic64_t *v)
| ^~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/atomic64.h:49:12: note: previous declaration of 'atomic64_dec_if_positive' was here
49 | extern s64 atomic64_dec_if_positive(atomic64_t *v);
| ^~~~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors
..
vim +1463 include/linux/atomic-arch-fallback.h
37f8173dd84936 Peter Zijlstra 2020-01-24 1442
37f8173dd84936 Peter Zijlstra 2020-01-24 1443 #ifndef arch_atomic64_inc
37f8173dd84936 Peter Zijlstra 2020-01-24 1444 static __always_inline void
37f8173dd84936 Peter Zijlstra 2020-01-24 1445 arch_atomic64_inc(atomic64_t *v)
37f8173dd84936 Peter Zijlstra 2020-01-24 1446 {
37f8173dd84936 Peter Zijlstra 2020-01-24 @1447 arch_atomic64_add(1, v);
37f8173dd84936 Peter Zijlstra 2020-01-24 1448 }
37f8173dd84936 Peter Zijlstra 2020-01-24 1449 #define arch_atomic64_inc arch_atomic64_inc
37f8173dd84936 Peter Zijlstra 2020-01-24 1450 #endif
37f8173dd84936 Peter Zijlstra 2020-01-24 1451
37f8173dd84936 Peter Zijlstra 2020-01-24 1452 #ifndef arch_atomic64_inc_return_relaxed
37f8173dd84936 Peter Zijlstra 2020-01-24 1453 #ifdef arch_atomic64_inc_return
37f8173dd84936 Peter Zijlstra 2020-01-24 1454 #define arch_atomic64_inc_return_acquire arch_atomic64_inc_return
37f8173dd84936 Peter Zijlstra 2020-01-24 1455 #define arch_atomic64_inc_return_release arch_atomic64_inc_return
37f8173dd84936 Peter Zijlstra 2020-01-24 1456 #define arch_atomic64_inc_return_relaxed arch_atomic64_inc_return
37f8173dd84936 Peter Zijlstra 2020-01-24 1457 #endif /* arch_atomic64_inc_return */
37f8173dd84936 Peter Zijlstra 2020-01-24 1458
37f8173dd84936 Peter Zijlstra 2020-01-24 1459 #ifndef arch_atomic64_inc_return
37f8173dd84936 Peter Zijlstra 2020-01-24 1460 static __always_inline s64
37f8173dd84936 Peter Zijlstra 2020-01-24 1461 arch_atomic64_inc_return(atomic64_t *v)
37f8173dd84936 Peter Zijlstra 2020-01-24 1462 {
37f8173dd84936 Peter Zijlstra 2020-01-24 @1463 return arch_atomic64_add_return(1, v);
37f8173dd84936 Peter Zijlstra 2020-01-24 1464 }
37f8173dd84936 Peter Zijlstra 2020-01-24 1465 #define arch_atomic64_inc_return arch_atomic64_inc_return
37f8173dd84936 Peter Zijlstra 2020-01-24 1466 #endif
37f8173dd84936 Peter Zijlstra 2020-01-24 1467
37f8173dd84936 Peter Zijlstra 2020-01-24 1468 #ifndef arch_atomic64_inc_return_acquire
37f8173dd84936 Peter Zijlstra 2020-01-24 1469 static __always_inline s64
37f8173dd84936 Peter Zijlstra 2020-01-24 1470 arch_atomic64_inc_return_acquire(atomic64_t *v)
37f8173dd84936 Peter Zijlstra 2020-01-24 1471 {
37f8173dd84936 Peter Zijlstra 2020-01-24 1472 return arch_atomic64_add_return_acquire(1, v);
37f8173dd84936 Peter Zijlstra 2020-01-24 1473 }
37f8173dd84936 Peter Zijlstra 2020-01-24 1474 #define arch_atomic64_inc_return_acquire arch_atomic64_inc_return_acquire
37f8173dd84936 Peter Zijlstra 2020-01-24 1475 #endif
37f8173dd84936 Peter Zijlstra 2020-01-24 1476
37f8173dd84936 Peter Zijlstra 2020-01-24 1477 #ifndef arch_atomic64_inc_return_release
37f8173dd84936 Peter Zijlstra 2020-01-24 1478 static __always_inline s64
37f8173dd84936 Peter Zijlstra 2020-01-24 1479 arch_atomic64_inc_return_release(atomic64_t *v)
37f8173dd84936 Peter Zijlstra 2020-01-24 1480 {
37f8173dd84936 Peter Zijlstra 2020-01-24 1481 return arch_atomic64_add_return_release(1, v);
37f8173dd84936 Peter Zijlstra 2020-01-24 1482 }
37f8173dd84936 Peter Zijlstra 2020-01-24 1483 #define arch_atomic64_inc_return_release arch_atomic64_inc_return_release
37f8173dd84936 Peter Zijlstra 2020-01-24 1484 #endif
37f8173dd84936 Peter Zijlstra 2020-01-24 1485
37f8173dd84936 Peter Zijlstra 2020-01-24 1486 #ifndef arch_atomic64_inc_return_relaxed
37f8173dd84936 Peter Zijlstra 2020-01-24 1487 static __always_inline s64
37f8173dd84936 Peter Zijlstra 2020-01-24 1488 arch_atomic64_inc_return_relaxed(atomic64_t *v)
37f8173dd84936 Peter Zijlstra 2020-01-24 1489 {
37f8173dd84936 Peter Zijlstra 2020-01-24 1490 return arch_atomic64_add_return_relaxed(1, v);
37f8173dd84936 Peter Zijlstra 2020-01-24 1491 }
37f8173dd84936 Peter Zijlstra 2020-01-24 1492 #define arch_atomic64_inc_return_relaxed arch_atomic64_inc_return_relaxed
37f8173dd84936 Peter Zijlstra 2020-01-24 1493 #endif
37f8173dd84936 Peter Zijlstra 2020-01-24 1494
37f8173dd84936 Peter Zijlstra 2020-01-24 1495 #else /* arch_atomic64_inc_return_relaxed */
37f8173dd84936 Peter Zijlstra 2020-01-24 1496
37f8173dd84936 Peter Zijlstra 2020-01-24 1497 #ifndef arch_atomic64_inc_return_acquire
37f8173dd84936 Peter Zijlstra 2020-01-24 1498 static __always_inline s64
37f8173dd84936 Peter Zijlstra 2020-01-24 1499 arch_atomic64_inc_return_acquire(atomic64_t *v)
37f8173dd84936 Peter Zijlstra 2020-01-24 1500 {
37f8173dd84936 Peter Zijlstra 2020-01-24 1501 s64 ret = arch_atomic64_inc_return_relaxed(v);
37f8173dd84936 Peter Zijlstra 2020-01-24 1502 __atomic_acquire_fence();
37f8173dd84936 Peter Zijlstra 2020-01-24 1503 return ret;
37f8173dd84936 Peter Zijlstra 2020-01-24 1504 }
37f8173dd84936 Peter Zijlstra 2020-01-24 1505 #define arch_atomic64_inc_return_acquire arch_atomic64_inc_return_acquire
37f8173dd84936 Peter Zijlstra 2020-01-24 1506 #endif
37f8173dd84936 Peter Zijlstra 2020-01-24 1507
37f8173dd84936 Peter Zijlstra 2020-01-24 1508 #ifndef arch_atomic64_inc_return_release
37f8173dd84936 Peter Zijlstra 2020-01-24 1509 static __always_inline s64
37f8173dd84936 Peter Zijlstra 2020-01-24 1510 arch_atomic64_inc_return_release(atomic64_t *v)
37f8173dd84936 Peter Zijlstra 2020-01-24 1511 {
37f8173dd84936 Peter Zijlstra 2020-01-24 1512 __atomic_release_fence();
37f8173dd84936 Peter Zijlstra 2020-01-24 1513 return arch_atomic64_inc_return_relaxed(v);
37f8173dd84936 Peter Zijlstra 2020-01-24 1514 }
37f8173dd84936 Peter Zijlstra 2020-01-24 1515 #define arch_atomic64_inc_return_release arch_atomic64_inc_return_release
37f8173dd84936 Peter Zijlstra 2020-01-24 1516 #endif
37f8173dd84936 Peter Zijlstra 2020-01-24 1517
37f8173dd84936 Peter Zijlstra 2020-01-24 1518 #ifndef arch_atomic64_inc_return
37f8173dd84936 Peter Zijlstra 2020-01-24 1519 static __always_inline s64
37f8173dd84936 Peter Zijlstra 2020-01-24 1520 arch_atomic64_inc_return(atomic64_t *v)
37f8173dd84936 Peter Zijlstra 2020-01-24 1521 {
37f8173dd84936 Peter Zijlstra 2020-01-24 1522 s64 ret;
37f8173dd84936 Peter Zijlstra 2020-01-24 1523 __atomic_pre_full_fence();
37f8173dd84936 Peter Zijlstra 2020-01-24 1524 ret = arch_atomic64_inc_return_relaxed(v);
37f8173dd84936 Peter Zijlstra 2020-01-24 1525 __atomic_post_full_fence();
37f8173dd84936 Peter Zijlstra 2020-01-24 1526 return ret;
37f8173dd84936 Peter Zijlstra 2020-01-24 1527 }
37f8173dd84936 Peter Zijlstra 2020-01-24 1528 #define arch_atomic64_inc_return arch_atomic64_inc_return
37f8173dd84936 Peter Zijlstra 2020-01-24 1529 #endif
37f8173dd84936 Peter Zijlstra 2020-01-24 1530
37f8173dd84936 Peter Zijlstra 2020-01-24 1531 #endif /* arch_atomic64_inc_return_relaxed */
37f8173dd84936 Peter Zijlstra 2020-01-24 1532
37f8173dd84936 Peter Zijlstra 2020-01-24 1533 #ifndef arch_atomic64_fetch_inc_relaxed
37f8173dd84936 Peter Zijlstra 2020-01-24 1534 #ifdef arch_atomic64_fetch_inc
37f8173dd84936 Peter Zijlstra 2020-01-24 1535 #define arch_atomic64_fetch_inc_acquire arch_atomic64_fetch_inc
37f8173dd84936 Peter Zijlstra 2020-01-24 1536 #define arch_atomic64_fetch_inc_release arch_atomic64_fetch_inc
37f8173dd84936 Peter Zijlstra 2020-01-24 1537 #define arch_atomic64_fetch_inc_relaxed arch_atomic64_fetch_inc
37f8173dd84936 Peter Zijlstra 2020-01-24 1538 #endif /* arch_atomic64_fetch_inc */
37f8173dd84936 Peter Zijlstra 2020-01-24 1539
37f8173dd84936 Peter Zijlstra 2020-01-24 1540 #ifndef arch_atomic64_fetch_inc
37f8173dd84936 Peter Zijlstra 2020-01-24 1541 static __always_inline s64
37f8173dd84936 Peter Zijlstra 2020-01-24 1542 arch_atomic64_fetch_inc(atomic64_t *v)
37f8173dd84936 Peter Zijlstra 2020-01-24 1543 {
37f8173dd84936 Peter Zijlstra 2020-01-24 @1544 return arch_atomic64_fetch_add(1, v);
37f8173dd84936 Peter Zijlstra 2020-01-24 1545 }
37f8173dd84936 Peter Zijlstra 2020-01-24 1546 #define arch_atomic64_fetch_inc arch_atomic64_fetch_inc
37f8173dd84936 Peter Zijlstra 2020-01-24 1547 #endif
37f8173dd84936 Peter Zijlstra 2020-01-24 1548
37f8173dd84936 Peter Zijlstra 2020-01-24 1549 #ifndef arch_atomic64_fetch_inc_acquire
37f8173dd84936 Peter Zijlstra 2020-01-24 1550 static __always_inline s64
37f8173dd84936 Peter Zijlstra 2020-01-24 1551 arch_atomic64_fetch_inc_acquire(atomic64_t *v)
37f8173dd84936 Peter Zijlstra 2020-01-24 1552 {
37f8173dd84936 Peter Zijlstra 2020-01-24 1553 return arch_atomic64_fetch_add_acquire(1, v);
37f8173dd84936 Peter Zijlstra 2020-01-24 1554 }
37f8173dd84936 Peter Zijlstra 2020-01-24 1555 #define arch_atomic64_fetch_inc_acquire arch_atomic64_fetch_inc_acquire
37f8173dd84936 Peter Zijlstra 2020-01-24 1556 #endif
37f8173dd84936 Peter Zijlstra 2020-01-24 1557
37f8173dd84936 Peter Zijlstra 2020-01-24 1558 #ifndef arch_atomic64_fetch_inc_release
37f8173dd84936 Peter Zijlstra 2020-01-24 1559 static __always_inline s64
37f8173dd84936 Peter Zijlstra 2020-01-24 1560 arch_atomic64_fetch_inc_release(atomic64_t *v)
37f8173dd84936 Peter Zijlstra 2020-01-24 1561 {
37f8173dd84936 Peter Zijlstra 2020-01-24 1562 return arch_atomic64_fetch_add_release(1, v);
37f8173dd84936 Peter Zijlstra 2020-01-24 1563 }
37f8173dd84936 Peter Zijlstra 2020-01-24 1564 #define arch_atomic64_fetch_inc_release arch_atomic64_fetch_inc_release
37f8173dd84936 Peter Zijlstra 2020-01-24 1565 #endif
37f8173dd84936 Peter Zijlstra 2020-01-24 1566
37f8173dd84936 Peter Zijlstra 2020-01-24 1567 #ifndef arch_atomic64_fetch_inc_relaxed
37f8173dd84936 Peter Zijlstra 2020-01-24 1568 static __always_inline s64
37f8173dd84936 Peter Zijlstra 2020-01-24 1569 arch_atomic64_fetch_inc_relaxed(atomic64_t *v)
37f8173dd84936 Peter Zijlstra 2020-01-24 1570 {
37f8173dd84936 Peter Zijlstra 2020-01-24 1571 return arch_atomic64_fetch_add_relaxed(1, v);
37f8173dd84936 Peter Zijlstra 2020-01-24 1572 }
37f8173dd84936 Peter Zijlstra 2020-01-24 1573 #define arch_atomic64_fetch_inc_relaxed arch_atomic64_fetch_inc_relaxed
37f8173dd84936 Peter Zijlstra 2020-01-24 1574 #endif
37f8173dd84936 Peter Zijlstra 2020-01-24 1575
37f8173dd84936 Peter Zijlstra 2020-01-24 1576 #else /* arch_atomic64_fetch_inc_relaxed */
37f8173dd84936 Peter Zijlstra 2020-01-24 1577
37f8173dd84936 Peter Zijlstra 2020-01-24 1578 #ifndef arch_atomic64_fetch_inc_acquire
37f8173dd84936 Peter Zijlstra 2020-01-24 1579 static __always_inline s64
37f8173dd84936 Peter Zijlstra 2020-01-24 1580 arch_atomic64_fetch_inc_acquire(atomic64_t *v)
37f8173dd84936 Peter Zijlstra 2020-01-24 1581 {
37f8173dd84936 Peter Zijlstra 2020-01-24 1582 s64 ret = arch_atomic64_fetch_inc_relaxed(v);
37f8173dd84936 Peter Zijlstra 2020-01-24 1583 __atomic_acquire_fence();
37f8173dd84936 Peter Zijlstra 2020-01-24 1584 return ret;
37f8173dd84936 Peter Zijlstra 2020-01-24 1585 }
37f8173dd84936 Peter Zijlstra 2020-01-24 1586 #define arch_atomic64_fetch_inc_acquire arch_atomic64_fetch_inc_acquire
37f8173dd84936 Peter Zijlstra 2020-01-24 1587 #endif
37f8173dd84936 Peter Zijlstra 2020-01-24 1588
37f8173dd84936 Peter Zijlstra 2020-01-24 1589 #ifndef arch_atomic64_fetch_inc_release
37f8173dd84936 Peter Zijlstra 2020-01-24 1590 static __always_inline s64
37f8173dd84936 Peter Zijlstra 2020-01-24 1591 arch_atomic64_fetch_inc_release(atomic64_t *v)
37f8173dd84936 Peter Zijlstra 2020-01-24 1592 {
37f8173dd84936 Peter Zijlstra 2020-01-24 1593 __atomic_release_fence();
37f8173dd84936 Peter Zijlstra 2020-01-24 1594 return arch_atomic64_fetch_inc_relaxed(v);
37f8173dd84936 Peter Zijlstra 2020-01-24 1595 }
37f8173dd84936 Peter Zijlstra 2020-01-24 1596 #define arch_atomic64_fetch_inc_release arch_atomic64_fetch_inc_release
37f8173dd84936 Peter Zijlstra 2020-01-24 1597 #endif
37f8173dd84936 Peter Zijlstra 2020-01-24 1598
37f8173dd84936 Peter Zijlstra 2020-01-24 1599 #ifndef arch_atomic64_fetch_inc
37f8173dd84936 Peter Zijlstra 2020-01-24 1600 static __always_inline s64
37f8173dd84936 Peter Zijlstra 2020-01-24 1601 arch_atomic64_fetch_inc(atomic64_t *v)
37f8173dd84936 Peter Zijlstra 2020-01-24 1602 {
37f8173dd84936 Peter Zijlstra 2020-01-24 1603 s64 ret;
37f8173dd84936 Peter Zijlstra 2020-01-24 1604 __atomic_pre_full_fence();
37f8173dd84936 Peter Zijlstra 2020-01-24 1605 ret = arch_atomic64_fetch_inc_relaxed(v);
37f8173dd84936 Peter Zijlstra 2020-01-24 1606 __atomic_post_full_fence();
37f8173dd84936 Peter Zijlstra 2020-01-24 1607 return ret;
37f8173dd84936 Peter Zijlstra 2020-01-24 1608 }
37f8173dd84936 Peter Zijlstra 2020-01-24 1609 #define arch_atomic64_fetch_inc arch_atomic64_fetch_inc
37f8173dd84936 Peter Zijlstra 2020-01-24 1610 #endif
37f8173dd84936 Peter Zijlstra 2020-01-24 1611
37f8173dd84936 Peter Zijlstra 2020-01-24 1612 #endif /* arch_atomic64_fetch_inc_relaxed */
37f8173dd84936 Peter Zijlstra 2020-01-24 1613
37f8173dd84936 Peter Zijlstra 2020-01-24 1614 #ifndef arch_atomic64_dec
37f8173dd84936 Peter Zijlstra 2020-01-24 1615 static __always_inline void
37f8173dd84936 Peter Zijlstra 2020-01-24 1616 arch_atomic64_dec(atomic64_t *v)
37f8173dd84936 Peter Zijlstra 2020-01-24 1617 {
37f8173dd84936 Peter Zijlstra 2020-01-24 @1618 arch_atomic64_sub(1, v);
37f8173dd84936 Peter Zijlstra 2020-01-24 1619 }
37f8173dd84936 Peter Zijlstra 2020-01-24 1620 #define arch_atomic64_dec arch_atomic64_dec
37f8173dd84936 Peter Zijlstra 2020-01-24 1621 #endif
37f8173dd84936 Peter Zijlstra 2020-01-24 1622
37f8173dd84936 Peter Zijlstra 2020-01-24 1623 #ifndef arch_atomic64_dec_return_relaxed
37f8173dd84936 Peter Zijlstra 2020-01-24 1624 #ifdef arch_atomic64_dec_return
37f8173dd84936 Peter Zijlstra 2020-01-24 1625 #define arch_atomic64_dec_return_acquire arch_atomic64_dec_return
37f8173dd84936 Peter Zijlstra 2020-01-24 1626 #define arch_atomic64_dec_return_release arch_atomic64_dec_return
37f8173dd84936 Peter Zijlstra 2020-01-24 1627 #define arch_atomic64_dec_return_relaxed arch_atomic64_dec_return
37f8173dd84936 Peter Zijlstra 2020-01-24 1628 #endif /* arch_atomic64_dec_return */
37f8173dd84936 Peter Zijlstra 2020-01-24 1629
37f8173dd84936 Peter Zijlstra 2020-01-24 1630 #ifndef arch_atomic64_dec_return
37f8173dd84936 Peter Zijlstra 2020-01-24 1631 static __always_inline s64
37f8173dd84936 Peter Zijlstra 2020-01-24 1632 arch_atomic64_dec_return(atomic64_t *v)
37f8173dd84936 Peter Zijlstra 2020-01-24 1633 {
37f8173dd84936 Peter Zijlstra 2020-01-24 @1634 return arch_atomic64_sub_return(1, v);
37f8173dd84936 Peter Zijlstra 2020-01-24 1635 }
37f8173dd84936 Peter Zijlstra 2020-01-24 1636 #define arch_atomic64_dec_return arch_atomic64_dec_return
37f8173dd84936 Peter Zijlstra 2020-01-24 1637 #endif37f8173dd84936 Peter Zijlstra 2020-01-24 1638
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org