net/mlx5e: Fix lock order in mlx5e_tx_reporter_ptpsq_unhealthy_recover
[ Upstream commit 1c2940ec0ddf51c689ee9ab85ead85c11b77809d ]
RTNL needs to be acquired before state_lock.
Fixes: fdce06bda7 ("net/mlx5e: Acquire RTNL lock before RQs/SQs activation/deactivation")
Signed-off-by: Cosmin Ratiu <cratiu@nvidia.com>
Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
Signed-off-by: Mark Bloch <mbloch@nvidia.com>
Link: https://patch.msgid.link/20250423083611.324567-5-mbloch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
c022830c2a
commit
488ab6d41f
@@ -177,6 +177,7 @@ static int mlx5e_tx_reporter_ptpsq_unhealthy_recover(void *ctx)
|
|||||||
|
|
||||||
priv = ptpsq->txqsq.priv;
|
priv = ptpsq->txqsq.priv;
|
||||||
|
|
||||||
|
rtnl_lock();
|
||||||
mutex_lock(&priv->state_lock);
|
mutex_lock(&priv->state_lock);
|
||||||
chs = &priv->channels;
|
chs = &priv->channels;
|
||||||
netdev = priv->netdev;
|
netdev = priv->netdev;
|
||||||
@@ -184,22 +185,19 @@ static int mlx5e_tx_reporter_ptpsq_unhealthy_recover(void *ctx)
|
|||||||
carrier_ok = netif_carrier_ok(netdev);
|
carrier_ok = netif_carrier_ok(netdev);
|
||||||
netif_carrier_off(netdev);
|
netif_carrier_off(netdev);
|
||||||
|
|
||||||
rtnl_lock();
|
|
||||||
mlx5e_deactivate_priv_channels(priv);
|
mlx5e_deactivate_priv_channels(priv);
|
||||||
rtnl_unlock();
|
|
||||||
|
|
||||||
mlx5e_ptp_close(chs->ptp);
|
mlx5e_ptp_close(chs->ptp);
|
||||||
err = mlx5e_ptp_open(priv, &chs->params, chs->c[0]->lag_port, &chs->ptp);
|
err = mlx5e_ptp_open(priv, &chs->params, chs->c[0]->lag_port, &chs->ptp);
|
||||||
|
|
||||||
rtnl_lock();
|
|
||||||
mlx5e_activate_priv_channels(priv);
|
mlx5e_activate_priv_channels(priv);
|
||||||
rtnl_unlock();
|
|
||||||
|
|
||||||
/* return carrier back if needed */
|
/* return carrier back if needed */
|
||||||
if (carrier_ok)
|
if (carrier_ok)
|
||||||
netif_carrier_on(netdev);
|
netif_carrier_on(netdev);
|
||||||
|
|
||||||
mutex_unlock(&priv->state_lock);
|
mutex_unlock(&priv->state_lock);
|
||||||
|
rtnl_unlock();
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user