Re: fs/xfs/xfs_buf.c:1534 xfs_buf_submit_bio() warn: unsigned '_x' is never less than zero.

From: Alexandre Ghiti
Date: Tue Feb 18 2025 - 09:52:37 EST


Hi Dan,

On 18/02/2025 15:21, Dan Carpenter wrote:
On Tue, Feb 18, 2025 at 08:39:21AM +0800, Philip Li wrote:
+ Dan

Hi Dan,

On Mon, Feb 17, 2025 at 01:12:03PM +0000, David Laight wrote:
On Mon, 17 Feb 2025 13:06:49 +0100
Alexandre Ghiti <alex@xxxxxxxx> wrote:

Hi Christoph,

On 17/02/2025 10:24, Christoph Hellwig wrote:
On Mon, Feb 17, 2025 at 01:53:08PM +0800, kernel test robot wrote:
New smatch warnings:
fs/xfs/xfs_buf.c:1534 xfs_buf_submit_bio() warn: unsigned '_x' is never less than zero.
Looks like this is an issue in the riscv virt_to_page implementation
which also shows up in various other places. Any chance this could get
fixed in the riscv code?

To me, the only test that could give rise to this warning is the last
part of:

#define is_linear_mapping(x) \
        ((x) >= PAGE_OFFSET && (!IS_ENABLED(CONFIG_64BIT) || (x) <
PAGE_OFFSET + KERN_VIRT_SIZE))

But given that the config is a 32-bit config, it should not be evaluated
at all.

Could that be a false-positive and then an issue in smatch?
Why is smatch even looking.
The equivalent check in gcc has been moved to -W2 because of all false positives.
The Smatch check is a bit more sophisticated than the GCC check...
I think if you removed the (!IS_ENABLED(CONFIG_64BIT) condition then
Smatch wouldn't trigger a warning here. How would I duplicate this
warning? The "ARCH=riscv make.cross" command does a 64bit build.


riscv uses the same toolchain for both 32 and 64-bit, if you look at the faulty config, you can see that CONFIG_32BIT is enabled so it actually is a 32-bit build.

Thanks for jumping in,

Alex



Screw it, I can just silence this warning based on that it's a kernel
build and the variable is called "_x".

regards,
dan carpenter


_______________________________________________
linux-riscv mailing list
linux-riscv@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/linux-riscv