Commit 19e13cb2 authored by Jose Abreu's avatar Jose Abreu Committed by David S. Miller
Browse files

net: stmmac: Hold rtnl lock in suspend/resume callbacks



We need to hold rnl lock in suspend and resume callbacks because phylink
requires it. Otherwise we will get a WARN() in suspend and resume.

Also, move phylink start and stop callbacks to inside device's internal
lock so that we prevent concurrent HW accesses.

Fixes: 74371272 ("net: stmmac: Convert to phylink and remove phylib logic")
Reported-by: default avatarChristophe ROULLIER <christophe.roullier@st.com>
Tested-by: default avatarChristophe ROULLIER <christophe.roullier@st.com>
Signed-off-by: default avatarJose Abreu <joabreu@synopsys.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 28e48603
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -4451,10 +4451,12 @@ int stmmac_suspend(struct device *dev)
	if (!ndev || !netif_running(ndev))
		return 0;

	phylink_stop(priv->phylink);

	mutex_lock(&priv->lock);

	rtnl_lock();
	phylink_stop(priv->phylink);
	rtnl_unlock();

	netif_device_detach(ndev);
	stmmac_stop_all_queues(priv);

@@ -4558,9 +4560,11 @@ int stmmac_resume(struct device *dev)

	stmmac_start_all_queues(priv);

	mutex_unlock(&priv->lock);

	rtnl_lock();
	phylink_start(priv->phylink);
	rtnl_unlock();

	mutex_unlock(&priv->lock);

	return 0;
}