Commit a637b3bf authored by Heiko Carstens's avatar Heiko Carstens
Browse files

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: default avatarkernel test robot <lkp@intel.com>
Link: https://lore.kernel.org/linux-mm/202104170449.SIIFKVjT-lkp@intel.com/


Fixes: d2b1f6d2 ("s390/cmpxchg: get rid of gcc atomic builtins")
Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
parent b44913fc
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -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,7 +84,8 @@ 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,
static __always_inline unsigned long __cmpxchg(unsigned long address,
					       unsigned long old,
					       unsigned long new, int size)
{
	unsigned long prev, tmp;