[lm-sensors] [PATCH 2.6.13-mm1] i2c: bug fix for busses/i2c-mv64xxx.c
Mark A. Greer
mgreer at mvista.com
Tue Sep 6 20:42:28 CEST 2005
Hi Jean,
On Fri, Sep 02, 2005 at 09:25:47PM +0200, Jean Delvare wrote:
> Hi Mark,
>
> > When an i2c transfer is successful, an incorrect value may be
> > returned. This patch fixes that.
>
> I would make this "is returned", as I can't think of a non-degenerated
> successful case where a correct value would be returned.
>
> > diff -Nur linux-2.6.13-mm1/drivers/i2c/busses/i2c-mv64xxx.c linux-2.6.13-mm1-mag/drivers/i2c/busses/i2c-mv64xxx.c
> > --- linux-2.6.13-mm1/drivers/i2c/busses/i2c-mv64xxx.c 2005-09-01 16:26:21.000000000 -0700
> > +++ linux-2.6.13-mm1-mag/drivers/i2c/busses/i2c-mv64xxx.c 2005-09-01 17:00:58.000000000 -0700
> > @@ -429,7 +429,7 @@
> > if ((rc = mv64xxx_i2c_execute_msg(drv_data, &msgs[i])) != 0)
> > break;
> >
> > - return rc;
> > + return (rc < 0) ? rc : num;
> > }
> >
> > static struct i2c_algorithm mv64xxx_i2c_algo = {
>
> Looks less than optimal to me. What about:
>
> When an i2c transfer is successful, an incorrect value is returned.
> This patch fixes that.
Yes, that's better.
> Signed-off-by: Jean Delvare <khali at linux-fr.org>
>
> drivers/i2c/busses/i2c-mv64xxx.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> --- linux-2.6.13.orig/drivers/i2c/busses/i2c-mv64xxx.c 2005-09-02 20:44:25.000000000 +0200
> +++ linux-2.6.13/drivers/i2c/busses/i2c-mv64xxx.c 2005-09-02 20:49:16.000000000 +0200
> @@ -423,13 +423,13 @@
> mv64xxx_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
> {
> struct mv64xxx_i2c_data *drv_data = i2c_get_adapdata(adap);
> - int i, rc = 0;
> + int i, rc;
>
> for (i=0; i<num; i++)
> - if ((rc = mv64xxx_i2c_execute_msg(drv_data, &msgs[i])) != 0)
> - break;
> + if ((rc = mv64xxx_i2c_execute_msg(drv_data, &msgs[i])) < 0)
> + return rc;
>
> - return rc;
> + return num;
> }
>
> static struct i2c_algorithm mv64xxx_i2c_algo = {
>
>
> Note that the change from "!= 0" to "< 0" is purely for safety, as
> mv64xxx_i2c_execute_msg is not supposed to return stricly positive
> values anyway.
Agreed. However, I think we still need to init 'rc' to 0 in case 'num' is
ever 0 to prevent random data from being returned.
Thanks for taking time for this.
Mark
More information about the lm-sensors
mailing list