Re: [PATCH v3] net: stmmac: compare p->des0 and p->des1 with __le32 type values

From: Min-Hua Chen
Date: Fri May 19 2023 - 21:55:39 EST


Hi Jakub,

>On Fri, 19 May 2023 19:50:28 +0800 Min-Hua Chen wrote:
>> - if ((p->des0 == 0xffffffff) && (p->des1 == 0xffffffff))
>> + if (p->des0 == cpu_to_le32(0xffffffff) &&
>> + p->des1 == cpu_to_le32(0xffffffff))
>
>Can you try to fix the sparse tool instead? I believe it already
>ignores such errors for the constant of 0, maybe it can be taught
>to ignore all "isomorphic" values?
>

I downloaded the source code of sparse and I'm afraid that I cannot make
0xFFFFFFFF ignored easily. I've tried ~0 instead of 0xFFFFFF,
but it did not work with current sparse.

0 is a special case mentioned in [1].

"""
One small note: the constant integer “0” is special.
You can use a constant zero as a bitwise integer type without
sparse ever complaining. This is because “bitwise” (as the name
implies) was designed for making sure that bitwise types don’t
get mixed up (little-endian vs big-endian vs cpu-endian vs whatever),
and there the constant “0” really _is_ special.
"""

For 0xFFFFFFFF, it may look like a false alarm, but we can silence the
sparse warning by taking a fix like mine and people can keep working on
other sparse warnings easier.
(There are around 7000 sparse warning in ARCH=arm64 defconfig build and
sometimes it is hard to remember all the false alarm cases)

Could you consider taking this patch, please?

>
>By "isomorphic" I mean that 0xffffffff == cpu_to_le32(0xffffffff)
>so there's no point complaining.

thanks,
Min-Hua

[1] https://www.kernel.org/doc/html/v4.12/dev-tools/sparse.html