smsc911x: check for FFWD success before checking for timeout
authorSteve Glendinning <steve.glendinning@smsc.com>
Wed, 4 Mar 2009 07:33:24 +0000 (07:33 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 13 Mar 2009 19:14:09 +0000 (12:14 -0700)
This patch from Juha Leppanen suppresses a false warning if a fast
forward operation succeeds on the very last attempt.

Juha> If smsc911x_reg_read loop is executed 500 times, timeout reaches 0
Juha> and the 500th smsc911x_reg_read result in val is ignored. If
Juha> testing order is changed, then val is checked first. The 500th
Juha> reg_read might be GOOD, why ignore it!

Signed-off-by: Steve Glendinning <steve.glendinning@smsc.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/smsc911x.c

index dceae8a65809c079048797654f337b4cae372655..9a795105cc7c72dd8dee6a85caa8c1d174aa2c2f 100644 (file)
@@ -955,7 +955,7 @@ smsc911x_rx_fastforward(struct smsc911x_data *pdata, unsigned int pktbytes)
                do {
                        udelay(1);
                        val = smsc911x_reg_read(pdata, RX_DP_CTRL);
-               } while (--timeout && (val & RX_DP_CTRL_RX_FFWD_));
+               } while ((val & RX_DP_CTRL_RX_FFWD_) && --timeout);
 
                if (unlikely(timeout == 0))
                        SMSC_WARNING(HW, "Timed out waiting for "