[PATCH] m68knommu: avoid fec driver hang when link disappears
authorPhilippe De Muyter <phdm@macqel.be>
Tue, 27 Jun 2006 03:05:33 +0000 (13:05 +1000)
committerLinus Torvalds <torvalds@g5.osdl.org>
Wed, 28 Jun 2006 01:26:37 +0000 (18:26 -0700)
Avoid requesting a `Graceful Transmit Stop' when link has disappeared,
because that request cannot complete without link.

Signed-off-by: Greg Ungerer <gerg@uclinux.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/net/fec.c

index bd6983d..16fc12f 100644 (file)
@@ -22,7 +22,7 @@
  * Copyright (c) 2001-2005 Greg Ungerer (gerg@snapgear.com)
  *
  * Bug fixes and cleanup by Philippe De Muyter (phdm@macqel.be)
- * Copyright (c) 2004-2005 Macq Electronique SA.
+ * Copyright (c) 2004-2006 Macq Electronique SA.
  */
 
 #include <linux/config.h>
@@ -2420,9 +2420,16 @@ fec_stop(struct net_device *dev)
        fep = netdev_priv(dev);
        fecp = fep->hwp;
 
-       fecp->fec_x_cntrl = 0x01;       /* Graceful transmit stop */
-
-       while(!(fecp->fec_ievent & FEC_ENET_GRA));
+       /*
+       ** We cannot expect a graceful transmit stop without link !!!
+       */
+       if (fep->link)
+               {
+               fecp->fec_x_cntrl = 0x01;       /* Graceful transmit stop */
+               udelay(10);
+               if (!(fecp->fec_ievent & FEC_ENET_GRA))
+                       printk("fec_stop : Graceful transmit stop did not complete !\n");
+               }
 
        /* Whack a reset.  We should wait for this.
        */