LF-2678 net: ethernet: stmmac: delete the eee_ctrl_timer after napi disabled
There have chance to re-enable the eee_ctrl_timer and fire the timer in napi callback after delete the timer in .stmmac_release(), which introduces to access eee registers in the timer function after clocks are disabled then causes system hang. It is safe to delete the timer after napi disabled and disable lpi mode. Tested-by: Joakim Zhang <qiangqing.zhang@nxp.com> Reviewed-by: Joakim Zhang <qiangqing.zhang@nxp.com> Signed-off-by: Fugang Duan <fugang.duan@nxp.com>zero-colors
parent
8a28e705c2
commit
ea2614aaac
|
@ -2822,9 +2822,6 @@ static int stmmac_release(struct net_device *dev)
|
|||
|
||||
u32 chan;
|
||||
|
||||
if (priv->eee_enabled)
|
||||
del_timer_sync(&priv->eee_ctrl_timer);
|
||||
|
||||
/* Stop and disconnect the PHY */
|
||||
phylink_stop(priv->phylink);
|
||||
phylink_disconnect_phy(priv->phylink);
|
||||
|
@ -2843,6 +2840,11 @@ static int stmmac_release(struct net_device *dev)
|
|||
if (priv->lpi_irq > 0)
|
||||
free_irq(priv->lpi_irq, dev);
|
||||
|
||||
if (priv->eee_enabled) {
|
||||
priv->tx_path_in_lpi_mode = false;
|
||||
del_timer_sync(&priv->eee_ctrl_timer);
|
||||
}
|
||||
|
||||
/* Stop TX/RX DMA and clear the descriptors */
|
||||
stmmac_stop_all_dma(priv);
|
||||
|
||||
|
@ -4977,6 +4979,11 @@ int stmmac_suspend(struct device *dev)
|
|||
for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
|
||||
del_timer_sync(&priv->tx_queue[chan].txtimer);
|
||||
|
||||
if (priv->eee_enabled) {
|
||||
priv->tx_path_in_lpi_mode = false;
|
||||
del_timer_sync(&priv->eee_ctrl_timer);
|
||||
}
|
||||
|
||||
/* Stop TX/RX DMA */
|
||||
stmmac_stop_all_dma(priv);
|
||||
|
||||
|
|
Loading…
Reference in New Issue