if (fep->delay_work.timeout) {
fep->delay_work.timeout = false;
+ rtnl_lock();
fec_restart(fep->netdev, fep->full_duplex);
netif_wake_queue(fep->netdev);
+ rtnl_unlock();
}
if (fep->delay_work.trig_tx) {
struct net_device *ndev = dev_get_drvdata(dev);
struct fec_enet_private *fep = netdev_priv(ndev);
+ rtnl_lock();
if (netif_running(ndev)) {
phy_stop(fep->phy_dev);
fec_stop(ndev);
netif_device_detach(ndev);
}
+ rtnl_unlock();
+
fec_enet_clk_enable(ndev, false);
pinctrl_pm_select_sleep_state(&fep->pdev->dev);
if (ret)
goto failed_clk;
+ rtnl_lock();
if (netif_running(ndev)) {
fec_restart(ndev, fep->full_duplex);
netif_device_attach(ndev);
phy_start(fep->phy_dev);
}
+ rtnl_unlock();
return 0;