From: Philippe De Muyter Date: Tue, 27 Jun 2006 03:05:33 +0000 (+1000) Subject: [PATCH] m68knommu: avoid fec driver hang when link disappears X-Git-Tag: v2.6.18-rc1~471 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=677177c5319f7079c22d04926c23b31166d7d405;p=linux-2.6-omap-h63xx.git [PATCH] m68knommu: avoid fec driver hang when link disappears Avoid requesting a `Graceful Transmit Stop' when link has disappeared, because that request cannot complete without link. Signed-off-by: Greg Ungerer Signed-off-by: Linus Torvalds --- diff --git a/drivers/net/fec.c b/drivers/net/fec.c index bd6983d1afb..16fc12fe933 100644 --- a/drivers/net/fec.c +++ b/drivers/net/fec.c @@ -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 @@ -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. */