Re: [PATCH] hwmon: (pmbus/acbel-fsg032) Add firmware version debugfs attribute

From: Dan Carpenter
Date: Fri Jun 30 2023 - 02:19:36 EST


On Thu, Jun 29, 2023 at 12:09:17PM -0700, Guenter Roeck wrote:
> On 6/29/23 11:59, Dan Carpenter wrote:
> > On Thu, Jun 29, 2023 at 09:53:16AM +0300, Dan Carpenter wrote:
> > > d2c6444389b625 Eddie James 2023-06-27 22 char out[8];
> > > d2c6444389b625 Eddie James 2023-06-27 23 int rc;
> > > d2c6444389b625 Eddie James 2023-06-27 24 int i;
> > > d2c6444389b625 Eddie James 2023-06-27 25
> > > d2c6444389b625 Eddie James 2023-06-27 26 rc = pmbus_lock_interruptible(client);
> > > d2c6444389b625 Eddie James 2023-06-27 27 if (rc)
> > > d2c6444389b625 Eddie James 2023-06-27 28 return rc;
> > > d2c6444389b625 Eddie James 2023-06-27 29
> > > d2c6444389b625 Eddie James 2023-06-27 30 rc = i2c_smbus_read_block_data(client, ACBEL_MFR_FW_REVISION, data);
> > > d2c6444389b625 Eddie James 2023-06-27 31 pmbus_unlock(client);
> > > d2c6444389b625 Eddie James 2023-06-27 32 if (rc < 0)
> > > d2c6444389b625 Eddie James 2023-06-27 33 return rc;
> > > d2c6444389b625 Eddie James 2023-06-27 34
> > > d2c6444389b625 Eddie James 2023-06-27 35 for (i = 0; i < rc && i < 3; ++i)
> > > d2c6444389b625 Eddie James 2023-06-27 @36 snprintf(&out[i * 2], 3, "%02X", data[i]);
> > >
> > > If data[i] is negative this will print FFFFFFF1 etc. (This is an x86
> > > config... Did we ever merge that patch to make char signed by default?)
> >
> > I meant unsigned not signed. But actually we debated both ways...
> > Signed by default would annoy PowerPC devs since they try to really
> > lean into the fact that char is unsigned on that arch. :P
> >
> > https://lwn.net/Articles/911914/
> >
>
> As if anything would be easy nowadays ;-). Anyway, in this case, the array
> should be explicitly unsigned, so changing the type to u8 was the right
> thing to do. Also, the driver should be usable on non-Intel systems,
> which is another reason to make the type sign-specific (even more so in
> the context of the above discussion).

Actually we did make char unsigned. I don't know if I'm super
comfortable with code that assumes char is unsigned. It's makes
backporting trickier. But this is definitely a false positive so I have
silenced the warning in Smatch.

regards,
dan carpenter

--- a/check_kernel_printf.c
+++ b/check_kernel_printf.c
@@ -827,7 +827,7 @@ hexbyte(const char *fmt, int fmt_len, struct expression *arg, int vaidx, struct
sm_warning("could not determine type of argument %d", vaidx);
return;
}
- if (type == &char_ctype || type == &schar_ctype)
+ if (type_signed(type) && (type == &char_ctype || type == &schar_ctype))
sm_warning("argument %d to %.*s specifier has type '%s'",
vaidx, fmt_len, fmt, type_to_str(type));
}