Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6b894a40 authored by Heiko Carstens's avatar Heiko Carstens Committed by Martin Schwidefsky
Browse files

s390/cmpxchg: fix compile warnings specific to s390



The cmpxchg macros and functions are a bit different than on other
architectures. In particular the macros do not store the return
value of a __cmpxchg function call in a variable before returning the
value.

This causes compile warnings that only occur on s390 like this one:

net/ipv4/af_inet.c: In function 'build_ehash_secret':
net/ipv4/af_inet.c:241:2: warning: value computed is not used [-Wunused-value]

To get rid of these warnings use the same construct that we already use
for the xchg macro, which was introduced for the same reason.

Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 0c44ca71
Loading
Loading
Loading
Loading
+25 −9
Original line number Diff line number Diff line
@@ -161,8 +161,13 @@ static inline unsigned long __cmpxchg(void *ptr, unsigned long old,
}

#define cmpxchg(ptr, o, n)						 \
	((__typeof__(*(ptr)))__cmpxchg((ptr), (unsigned long)(o),	\
				       (unsigned long)(n), sizeof(*(ptr))))
({									 \
	__typeof__(*(ptr)) __ret;					 \
	__ret = (__typeof__(*(ptr)))					 \
		__cmpxchg((ptr), (unsigned long)(o), (unsigned long)(n), \
			  sizeof(*(ptr)));				 \
	__ret;								 \
})

#ifdef CONFIG_64BIT
#define cmpxchg64(ptr, o, n)						\
@@ -184,10 +189,16 @@ static inline unsigned long long __cmpxchg64(void *ptr,
		: "memory", "cc");
	return rp_old.pair;
}

#define cmpxchg64(ptr, o, n)				\
	((__typeof__(*(ptr)))__cmpxchg64((ptr),				\
({							\
	__typeof__(*(ptr)) __ret;			\
	__ret = (__typeof__(*(ptr)))			\
		__cmpxchg64((ptr),			\
			    (unsigned long long)(o),	\
					 (unsigned long long)(n)))
			    (unsigned long long)(n));	\
	__ret;						\
})
#endif /* CONFIG_64BIT */

#include <asm-generic/cmpxchg-local.h>
@@ -216,8 +227,13 @@ static inline unsigned long __cmpxchg_local(void *ptr,
 * them available.
 */
#define cmpxchg_local(ptr, o, n)					\
	((__typeof__(*(ptr)))__cmpxchg_local((ptr), (unsigned long)(o),	\
			(unsigned long)(n), sizeof(*(ptr))))
({									\
	__typeof__(*(ptr)) __ret;					\
	__ret = (__typeof__(*(ptr)))					\
		__cmpxchg_local((ptr), (unsigned long)(o),		\
				(unsigned long)(n), sizeof(*(ptr)));	\
	__ret;								\
})

#define cmpxchg64_local(ptr, o, n)	cmpxchg64((ptr), (o), (n))