arch/hexagon/include/asm/cmpxchg.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
From: Willem de Bruijn <willemb@google.com>
Sparse reports
net/ipv4/inet_diag.c:1511:17: sparse: sparse: Using plain integer as NULL pointer
Due to this code calling cmpxchg on a non-integer type
struct inet_diag_handler *
return !cmpxchg((const struct inet_diag_handler**)&inet_diag_table[type],
NULL, h) ? 0 : -EEXIST;
While hexagon's cmpxchg assigns an integer value to a variable of this
type.
__typeof__(*(ptr)) __oldval = 0;
Update this assignment to cast 0 to the correct type.
The original issue is easily reproduced at head with the below block,
and is absent after this change.
make LLVM=1 ARCH=hexagon defconfig
make C=1 LLVM=1 ARCH=hexagon net/ipv4/inet_diag.o
Fixes: 99a70aa051d2 ("Hexagon: Add processor and system headers")
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202411091538.PGSTqUBi-lkp@intel.com/
Signed-off-by: Willem de Bruijn <willemb@google.com>
---
arch/hexagon/include/asm/cmpxchg.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/hexagon/include/asm/cmpxchg.h b/arch/hexagon/include/asm/cmpxchg.h
index bf6cf5579cf4..9c58fb81f7fd 100644
--- a/arch/hexagon/include/asm/cmpxchg.h
+++ b/arch/hexagon/include/asm/cmpxchg.h
@@ -56,7 +56,7 @@ __arch_xchg(unsigned long x, volatile void *ptr, int size)
__typeof__(ptr) __ptr = (ptr); \
__typeof__(*(ptr)) __old = (old); \
__typeof__(*(ptr)) __new = (new); \
- __typeof__(*(ptr)) __oldval = 0; \
+ __typeof__(*(ptr)) __oldval = (__typeof__(*(ptr))) 0; \
\
asm volatile( \
"1: %0 = memw_locked(%1);\n" \
--
2.47.0.338.g60cca15819-goog
Hi Willem,
>
> From: Willem de Bruijn <willemb@google.com>
>
> Sparse reports
>
> net/ipv4/inet_diag.c:1511:17: sparse: sparse: Using plain integer as NULL pointer
>
> Due to this code calling cmpxchg on a non-integer type
> struct inet_diag_handler *
>
> return !cmpxchg((const struct inet_diag_handler**)&inet_diag_table[type],
> NULL, h) ? 0 : -EEXIST;
>
> While hexagon's cmpxchg assigns an integer value to a variable of this
> type.
>
> __typeof__(*(ptr)) __oldval = 0;
>
> Update this assignment to cast 0 to the correct type.
>
> The original issue is easily reproduced at head with the below block,
> and is absent after this change.
>
> make LLVM=1 ARCH=hexagon defconfig
> make C=1 LLVM=1 ARCH=hexagon net/ipv4/inet_diag.o
>
> Fixes: 99a70aa051d2 ("Hexagon: Add processor and system headers")
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202411091538.PGSTqUBi-lkp@intel.com/
> Signed-off-by: Willem de Bruijn <willemb@google.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202501031246.AD8Jjze0-lkp@intel.com/
Tested-by: Christian Gmeiner <cgmeiner@igalia.com>
> ---
> arch/hexagon/include/asm/cmpxchg.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/hexagon/include/asm/cmpxchg.h b/arch/hexagon/include/asm/cmpxchg.h
> index bf6cf5579cf4..9c58fb81f7fd 100644
> --- a/arch/hexagon/include/asm/cmpxchg.h
> +++ b/arch/hexagon/include/asm/cmpxchg.h
> @@ -56,7 +56,7 @@ __arch_xchg(unsigned long x, volatile void *ptr, int size)
> __typeof__(ptr) __ptr = (ptr); \
> __typeof__(*(ptr)) __old = (old); \
> __typeof__(*(ptr)) __new = (new); \
> - __typeof__(*(ptr)) __oldval = 0; \
> + __typeof__(*(ptr)) __oldval = (__typeof__(*(ptr))) 0; \
> \
> asm volatile( \
> "1: %0 = memw_locked(%1);\n" \
> --
> 2.47.0.338.g60cca15819-goog
>
>
--
greets
--
Christian Gmeiner, MSc
https://christian-gmeiner.info/privacypolicy
Hi Brian,
Do you have an estimate for when this patch will be picked? We are
getting build reports from Hexagon in the V3D GPU driver [1].
[1]
https://lore.kernel.org/oe-kbuild-all/202501031246.AD8Jjze0-lkp@intel.com/
Best Regards,
- Maíra
On 07/01/25 07:17, Christian Gmeiner wrote:
> Hi Willem,
>
>>
>> From: Willem de Bruijn <willemb@google.com>
>>
>> Sparse reports
>>
>> net/ipv4/inet_diag.c:1511:17: sparse: sparse: Using plain integer as NULL pointer
>>
>> Due to this code calling cmpxchg on a non-integer type
>> struct inet_diag_handler *
>>
>> return !cmpxchg((const struct inet_diag_handler**)&inet_diag_table[type],
>> NULL, h) ? 0 : -EEXIST;
>>
>> While hexagon's cmpxchg assigns an integer value to a variable of this
>> type.
>>
>> __typeof__(*(ptr)) __oldval = 0;
>>
>> Update this assignment to cast 0 to the correct type.
>>
>> The original issue is easily reproduced at head with the below block,
>> and is absent after this change.
>>
>> make LLVM=1 ARCH=hexagon defconfig
>> make C=1 LLVM=1 ARCH=hexagon net/ipv4/inet_diag.o
>>
>> Fixes: 99a70aa051d2 ("Hexagon: Add processor and system headers")
>> Reported-by: kernel test robot <lkp@intel.com>
>> Closes: https://lore.kernel.org/oe-kbuild-all/202411091538.PGSTqUBi-lkp@intel.com/
>> Signed-off-by: Willem de Bruijn <willemb@google.com>
>
> Closes: https://lore.kernel.org/oe-kbuild-all/202501031246.AD8Jjze0-lkp@intel.com/
> Tested-by: Christian Gmeiner <cgmeiner@igalia.com>
>
>> ---
>> arch/hexagon/include/asm/cmpxchg.h | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/arch/hexagon/include/asm/cmpxchg.h b/arch/hexagon/include/asm/cmpxchg.h
>> index bf6cf5579cf4..9c58fb81f7fd 100644
>> --- a/arch/hexagon/include/asm/cmpxchg.h
>> +++ b/arch/hexagon/include/asm/cmpxchg.h
>> @@ -56,7 +56,7 @@ __arch_xchg(unsigned long x, volatile void *ptr, int size)
>> __typeof__(ptr) __ptr = (ptr); \
>> __typeof__(*(ptr)) __old = (old); \
>> __typeof__(*(ptr)) __new = (new); \
>> - __typeof__(*(ptr)) __oldval = 0; \
>> + __typeof__(*(ptr)) __oldval = (__typeof__(*(ptr))) 0; \
>> \
>> asm volatile( \
>> "1: %0 = memw_locked(%1);\n" \
>> --
>> 2.47.0.338.g60cca15819-goog
>>
>>
>
>
© 2016 - 2025 Red Hat, Inc.