Skip to content

Commit 212dd84

Browse files
ctmarinaswilldeacon
authored andcommitted
arm64: Silence sparse warnings caused by the type casting in (cmp)xchg
The arm64 xchg/cmpxchg() wrappers cast the arguments to (unsigned long) prior to invoking the static inline functions implementing the operation. Some restrictive type annotations (e.g. __bitwise) lead to sparse warnings like below: sparse warnings: (new ones prefixed by >>) fs/crypto/bio.c:67:17: sparse: sparse: cast from restricted blk_status_t >> fs/crypto/bio.c:67:17: sparse: sparse: cast to restricted blk_status_t Force the casting in the arm64 xchg/cmpxchg() wrappers to silence sparse. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/oe-kbuild-all/202602230947.uNRsPyBn-lkp@intel.com/ Link: https://lore.kernel.org/r/202602230947.uNRsPyBn-lkp@intel.com/ Cc: Will Deacon <will@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Christoph Hellwig <hch@lst.de> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Will Deacon <will@kernel.org>
1 parent df6e4ab commit 212dd84

1 file changed

Lines changed: 7 additions & 5 deletions

File tree

arch/arm64/include/asm/cmpxchg.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,9 @@ __XCHG_GEN(_mb)
9191
#define __xchg_wrapper(sfx, ptr, x) \
9292
({ \
9393
__typeof__(*(ptr)) __ret; \
94-
__ret = (__typeof__(*(ptr))) \
95-
__arch_xchg##sfx((unsigned long)(x), (ptr), sizeof(*(ptr))); \
94+
__ret = (__force __typeof__(*(ptr))) \
95+
__arch_xchg##sfx((__force unsigned long)(x), (ptr), \
96+
sizeof(*(ptr))); \
9697
__ret; \
9798
})
9899

@@ -175,9 +176,10 @@ __CMPXCHG_GEN(_mb)
175176
#define __cmpxchg_wrapper(sfx, ptr, o, n) \
176177
({ \
177178
__typeof__(*(ptr)) __ret; \
178-
__ret = (__typeof__(*(ptr))) \
179-
__cmpxchg##sfx((ptr), (unsigned long)(o), \
180-
(unsigned long)(n), sizeof(*(ptr))); \
179+
__ret = (__force __typeof__(*(ptr))) \
180+
__cmpxchg##sfx((ptr), (__force unsigned long)(o), \
181+
(__force unsigned long)(n), \
182+
sizeof(*(ptr))); \
181183
__ret; \
182184
})
183185

0 commit comments

Comments
 (0)