Message ID | 1222103036-27770-1-git-send-email-tpiepho@freescale.com |
---|---|
State | Accepted, archived |
Delegated to: | Jeff Garzik |
Headers | show |
Trent Piepho wrote: > The loop with the timeout used "while (... && timeout--)", which means > than when the timeout occurs, "timeout" will be -1 after the loop has > exited. The code that checks if the looped exited because of a timeout > used "if (timeout <= 0)". Seems ok, except timeout is unsigned, and > (unsigned)-1 isn't less than zero! > > Using "--timeout" in the loop fixes this problem, as now "timeout" will be > 0 when the loop times out. > > This also fixes a bug in the existing code, where it will erroneously think > a timeout occurred if the condition the loop was waiting for is satisfied > on the final iteration before a timeout. > > Signed-off-by: Trent Piepho <tpiepho@freescale.com> > Acked-by: Andy Fleming <afleming@freescale.com> > --- > drivers/net/gianfar_mii.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/gianfar_mii.c b/drivers/net/gianfar_mii.c > index ebcfb27..906aba2 100644 > --- a/drivers/net/gianfar_mii.c > +++ b/drivers/net/gianfar_mii.c > @@ -136,12 +136,12 @@ static int gfar_mdio_reset(struct mii_bus *bus) > > /* Wait until the bus is free */ > while ((gfar_read(®s->miimind) & MIIMIND_BUSY) && > - timeout--) > + --timeout) > cpu_relax(); > > mutex_unlock(&bus->mdio_lock); > > - if(timeout <= 0) { > + if(timeout == 0) { > printk(KERN_ERR "%s: The MII Bus is stuck!\n", applied -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/gianfar_mii.c b/drivers/net/gianfar_mii.c index ebcfb27..906aba2 100644 --- a/drivers/net/gianfar_mii.c +++ b/drivers/net/gianfar_mii.c @@ -136,12 +136,12 @@ static int gfar_mdio_reset(struct mii_bus *bus) /* Wait until the bus is free */ while ((gfar_read(®s->miimind) & MIIMIND_BUSY) && - timeout--) + --timeout) cpu_relax(); mutex_unlock(&bus->mdio_lock); - if(timeout <= 0) { + if(timeout == 0) { printk(KERN_ERR "%s: The MII Bus is stuck!\n", bus->name); return -EBUSY;