[PATCH] i2c-mxs: fix compile warning in mxs_i2c_xfer()
Uwe Kleine-König
u.kleine-koenig at pengutronix.de
Thu Nov 24 04:06:53 EST 2011
Hello,
On Thu, Nov 24, 2011 at 09:02:21AM +0000, Dong Aisheng-B29396 wrote:
> > > > diff --git a/drivers/i2c/busses/i2c-mxs.c
> > > > b/drivers/i2c/busses/i2c-mxs.c index 7e78f7c..00f098f 100644
> > > > --- a/drivers/i2c/busses/i2c-mxs.c
> > > > +++ b/drivers/i2c/busses/i2c-mxs.c
> > > > @@ -193,7 +193,7 @@ static int mxs_i2c_wait_for_data(struct
> > > > mxs_i2c_dev *i2c)
> > > >
> > > > static int mxs_i2c_finish_read(struct mxs_i2c_dev *i2c, u8 *buf,
> > > > int len) {
> > > > - u32 data;
> > > > + u32 data = 0;
> > > > int i;
> > > >
> > > > for (i = 0; i < len; i++) {
> > > Looks like a stupid compiler. Then better use
> > >
> > > u32 uninitialized_var(data);
> >
> > Leave it as it is and fix the compiler? Will do another test later to
> > make sure.
> >
>
> Compiler is wrong?
> Just from the code that it seems to be right the 'data' might be used
> uninitialized.
>
> Something I missed?
>
> static int mxs_i2c_finish_read(struct mxs_i2c_dev *i2c, u8 *buf, int len)
> {
> u32 data;
> int i;
>
> for (i = 0; i < len; i++) {
> if ((i & 3) == 0) {
> if (mxs_i2c_wait_for_data(i2c))
> return -ETIMEDOUT;
> data = readl(i2c->regs + MXS_I2C_QUEUEDATA);
> }
> buf[i] = data & 0xff;
> data >>= 8;
> }
When data is used the first time, i is 0, so it went through the body of
the if above before which assigned data. So no, data is initialized when
used to assign buf[i].
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
More information about the linux-arm-kernel
mailing list