提交 dd045193 编写于 作者: S Steve Glendinning 提交者: David S. Miller

smsc911x: fix BUG if module is removed while interface is up

If the module is removed while its interface is up, smsc911x_stop is not
called until after smsc911x_drv_remove has disposed of phy_dev.  This
patch changes the stop method to handle this situation.

This is a different problem to the one reported by dfoley@telus.net.
Signed-off-by: NSteve Glendinning <steve.glendinning@smsc.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 6332178d
......@@ -1267,8 +1267,6 @@ static int smsc911x_stop(struct net_device *dev)
struct smsc911x_data *pdata = netdev_priv(dev);
unsigned int temp;
BUG_ON(!pdata->phy_dev);
/* Disable all device interrupts */
temp = smsc911x_reg_read(pdata, INT_CFG);
temp &= ~INT_CFG_IRQ_EN_;
......@@ -1283,7 +1281,8 @@ static int smsc911x_stop(struct net_device *dev)
smsc911x_tx_update_txcounters(dev);
/* Bring the PHY down */
phy_stop(pdata->phy_dev);
if (pdata->phy_dev)
phy_stop(pdata->phy_dev);
SMSC_TRACE(IFDOWN, "Interface stopped");
return 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册