Skip to contentSkip to conversation

riscv: atomic: Using ARCH_ATOMIC in asm/atomic.h

PATCH In review [email protected] 3 participants 5 messages Apr 15, 2021 – Apr 17, 2021

Subsystems (4)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

PATCH 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
index 400a8c8..7436981 100644
@@ -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
maintainer
#1 lore raw

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.

author maintainer
#2 lore raw

Sorry, 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/
author maintainer
#3 lore raw
In reply to Peter Zijlstra
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.

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/
#4 lore raw
In reply to [email protected]
I 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  #endif

37f8173dd84936 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