[PATCH] powerpc: Silence sparse warnings caused by type casting in (cmp)xchg

"Christophe Leroy (CS GROUP)" <[email protected]>
Newsgroups gmane.linux.ports.ppc.embedded
Message-ID <289a7ffac9cb5b6d26a57fdc26605bf725285302.1786608980.git.chleroy__8698.96420497156$1786609045$gmane$org@kernel.org>
Powerpc arch_cmpxchg() wrapper macros cast arguments to
'unsigned long' before calling the functions implementing the
operation. Some type annotations (e.g. __bitwise) generate
sparse warnings like:

  block/blk-crypto-fallback.c:164:17: warning: cast from restricted blk_status_t
  block/blk-crypto-fallback.c:164:17: warning: cast to restricted blk_status_t

Force casting in the macros to avoid the warnings:

Reported-by: kernel test robot <[email protected]>
Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
Signed-off-by: Christophe Leroy (CS GROUP) <[email protected]>
---
 arch/powerpc/include/asm/cmpxchg.h | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/arch/powerpc/include/asm/cmpxchg.h b/arch/powerpc/include/asm/cmpxchg.h
index dbb50c06f0bf..7264e33ef877 100644
--- a/arch/powerpc/include/asm/cmpxchg.h
+++ b/arch/powerpc/include/asm/cmpxchg.h
@@ -700,8 +700,9 @@ __cmpxchg_acquire(void *ptr, unsigned long old, unsigned long new,
   ({									 \
      __typeof__(*(ptr)) _o_ = (o);					 \
      __typeof__(*(ptr)) _n_ = (n);					 \
-     (__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_,		 \
-				    (unsigned long)_n_, sizeof(*(ptr))); \
+     (__force __typeof__(*(ptr)))					 \
+	__cmpxchg((ptr), (__force unsigned long)_o_,			 \
+		  (__force unsigned long)_n_, sizeof(*(ptr)));		 \
   })
 
 
@@ -709,26 +710,27 @@ __cmpxchg_acquire(void *ptr, unsigned long old, unsigned long new,
   ({									 \
      __typeof__(*(ptr)) _o_ = (o);					 \
      __typeof__(*(ptr)) _n_ = (n);					 \
-     (__typeof__(*(ptr))) __cmpxchg_local((ptr), (unsigned long)_o_,	 \
-				    (unsigned long)_n_, sizeof(*(ptr))); \
+     (__force __typeof__(*(ptr)))					 \
+	__cmpxchg_local((ptr), (__force unsigned long)_o_,		 \
+			(__force unsigned long)_n_, sizeof(*(ptr)));	 \
   })
 
 #define arch_cmpxchg_relaxed(ptr, o, n)					\
 ({									\
 	__typeof__(*(ptr)) _o_ = (o);					\
 	__typeof__(*(ptr)) _n_ = (n);					\
-	(__typeof__(*(ptr))) __cmpxchg_relaxed((ptr),			\
-			(unsigned long)_o_, (unsigned long)_n_,		\
-			sizeof(*(ptr)));				\
+	(__force __typeof__(*(ptr)))					\
+	  __cmpxchg_relaxed((ptr), (__force unsigned long)_o_,		\
+			    (__force unsigned long)_n_, sizeof(*(ptr)));\
 })
 
 #define arch_cmpxchg_acquire(ptr, o, n)					\
 ({									\
 	__typeof__(*(ptr)) _o_ = (o);					\
 	__typeof__(*(ptr)) _n_ = (n);					\
-	(__typeof__(*(ptr))) __cmpxchg_acquire((ptr),			\
-			(unsigned long)_o_, (unsigned long)_n_,		\
-			sizeof(*(ptr)));				\
+	(__force __typeof__(*(ptr)))					\
+	  __cmpxchg_acquire((ptr), (__force unsigned long)_o_,		\
+			    (__force unsigned long)_n_, sizeof(*(ptr)));\
 })
 #ifdef CONFIG_PPC64
 #define arch_cmpxchg64(ptr, o, n)					\
-- 
2.54.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.