Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e743471f authored by Bryan O'Donoghue's avatar Bryan O'Donoghue Committed by David S. Miller
Browse files

stmmac: fix oops on rmmod after assigning ip addr



An oops exists in the flow of stmmac_release().
phy_ethtool_get_wol() depends on phydev->drv.
phydev->drv will be null after stmmac_mdio_unreg() completes.

Steps to reproduce on Quark X1000:

1. ifconfig eth0 192.168.0.1
2. rmmod stmmac_pci

To fix this stmmac_mdio_unreg() should be run after unregister_netdev().

Signed-off-by: default avatarBryan O'Donoghue <pure.logic@nexus-software.ie>
Reported-by: default avatarDan O'Donovan <dan.odonovan@emutex.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 31976cfd
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -2970,15 +2970,15 @@ int stmmac_dvr_remove(struct net_device *ndev)
	priv->hw->dma->stop_tx(priv->ioaddr);

	stmmac_set_mac(priv->ioaddr, false);
	if (priv->pcs != STMMAC_PCS_RGMII && priv->pcs != STMMAC_PCS_TBI &&
	    priv->pcs != STMMAC_PCS_RTBI)
		stmmac_mdio_unregister(ndev);
	netif_carrier_off(ndev);
	unregister_netdev(ndev);
	if (priv->stmmac_rst)
		reset_control_assert(priv->stmmac_rst);
	clk_disable_unprepare(priv->pclk);
	clk_disable_unprepare(priv->stmmac_clk);
	if (priv->pcs != STMMAC_PCS_RGMII && priv->pcs != STMMAC_PCS_TBI &&
	    priv->pcs != STMMAC_PCS_RTBI)
		stmmac_mdio_unregister(ndev);
	free_netdev(ndev);

	return 0;