Hello, > From: Yoshihiro Shimoda, Sent: Thursday, October 19, 2023 8:33 PM > > Fix races between ravb_tx_timeout_work() and functions of net_device_ops > and ethtool_ops by using rtnl_trylock() and rtnl_unlock(). Note that > since ravb_close() is under the rtnl lock and calls cancel_work_sync(), > ravb_tx_timeout_work() should calls rtnl_trylock(). Otherwise, a deadlock > may happen in ravb_tx_timeout_work() like below: > > CPU0 CPU1 > ravb_tx_timeout() > schedule_work() > ... > __dev_close_many() > // Under rtnl lock > ravb_close() > cancel_work_sync() > // Waiting > ravb_tx_timeout_work() > rtnl_lock() > // This is possible to cause a deadlock > > Fixes: c156633f1353 ("Renesas Ethernet AVB driver proper") > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx> Gentle ping. I confirmed that I could apply this patch on the latest net.git / main branch. Best regards, Yoshihiro Shimoda > --- > Changes from v1: <snip URL> > - Modify commit description. > - Use goto in a error path. > > drivers/net/ethernet/renesas/ravb_main.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c > index 0ef0b88b7145..300c1885e1e1 100644 > --- a/drivers/net/ethernet/renesas/ravb_main.c > +++ b/drivers/net/ethernet/renesas/ravb_main.c > @@ -1874,6 +1874,9 @@ static void ravb_tx_timeout_work(struct work_struct *work) > struct net_device *ndev = priv->ndev; > int error; > > + if (!rtnl_trylock()) > + return; > + > netif_tx_stop_all_queues(ndev); > > /* Stop PTP Clock driver */ > @@ -1907,7 +1910,7 @@ static void ravb_tx_timeout_work(struct work_struct *work) > */ > netdev_err(ndev, "%s: ravb_dmac_init() failed, error %d\n", > __func__, error); > - return; > + goto out_unlock; > } > ravb_emac_init(ndev); > > @@ -1917,6 +1920,9 @@ static void ravb_tx_timeout_work(struct work_struct *work) > ravb_ptp_init(ndev, priv->pdev); > > netif_tx_start_all_queues(ndev); > + > +out_unlock: > + rtnl_unlock(); > } > > /* Packet transmit function for Ethernet AVB */ > -- > 2.25.1