Re: [PATCH net] net: spacemit: Hold RTNL lock in emac_resume() and emac_suspend()
From: Ali Tariq
Date: Fri Nov 06 2026 - 05:46:03 EST
On 11/6/26 2:43 PM, Troy Mitchell wrote:
On Thu, 5 Nov 2026 17:34:37 +0500, Ali Tariq wrote:
@@ -2056,7 +2059,9 @@ static int emac_suspend(struct device *dev)This can deadlock. emac_stop() -> emac_down() calls
return 0;
}
+ rtnl_lock();
emac_stop(ndev);
+ rtnl_unlock();
clk_disable_unprepare(priv->bus_clk);
netif_device_detach(ndev);
cancel_work_sync(&priv->tx_timeout_task) with RTNL now held, while
emac_tx_timeout_task() starts with rtnl_lock().
Thanks Troy, that makes sense.
For the deadlock, I think the correct function to call is rtnl_trylock() inside the emac_tx_timeout_task(), which would return if the lock is already held and will hold the lock if it is not.
What are your thoughts on this? Does a v2 changing rtnl_lock() to rtnl_trylock() inside emac_tx_timeout_task() make sense?
Regards,
Ali