summaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
authorHeiko Carstens <hca@linux.ibm.com>2021-04-17 14:48:32 +0200
committerHeiko Carstens <hca@linux.ibm.com>2021-04-18 21:32:02 +0200
commita637b3bfa43aead7221b79cd92e092ef911c8253 (patch)
treeaba40f892ed3299a71148da73796841abc60f6f0 /arch/s390
parents390/smp: fix do_restart() prototype (diff)
downloadlinux-a637b3bfa43aead7221b79cd92e092ef911c8253.tar.xz
linux-a637b3bfa43aead7221b79cd92e092ef911c8253.zip
s390/atomic,cmpxchg: always inline __xchg/__cmpxchg
Make sure to always inline __xchg() and __cmpxchg() otherwise the compiler might decide to generate out-of-line versions which will fail at link time: s390-linux-ld: lib/atomic64_test.o: in function `__xchg': >> atomic64_test.c:(.text.unlikely+0xa4): undefined reference to `__xchg_called_with_bad_pointer' Reported-by: kernel test robot <lkp@intel.com> Link: https://lore.kernel.org/linux-mm/202104170449.SIIFKVjT-lkp@intel.com/ Fixes: d2b1f6d2d350 ("s390/cmpxchg: get rid of gcc atomic builtins") Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/include/asm/cmpxchg.h8
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/s390/include/asm/cmpxchg.h b/arch/s390/include/asm/cmpxchg.h
index e1eb65fceef2..1960a7295ae5 100644
--- a/arch/s390/include/asm/cmpxchg.h
+++ b/arch/s390/include/asm/cmpxchg.h
@@ -14,7 +14,8 @@
void __xchg_called_with_bad_pointer(void);
-static inline unsigned long __xchg(unsigned long x, unsigned long address, int size)
+static __always_inline unsigned long __xchg(unsigned long x,
+ unsigned long address, int size)
{
unsigned long old;
int shift;
@@ -83,8 +84,9 @@ static inline unsigned long __xchg(unsigned long x, unsigned long address, int s
void __cmpxchg_called_with_bad_pointer(void);
-static inline unsigned long __cmpxchg(unsigned long address, unsigned long old,
- unsigned long new, int size)
+static __always_inline unsigned long __cmpxchg(unsigned long address,
+ unsigned long old,
+ unsigned long new, int size)
{
unsigned long prev, tmp;
int shift;