mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-25 20:10:23 +09:00
net/mlx5e: reset XPS on error flow if netdev isn't registered yet
commit77ecd10d0aupstream. mlx5e_attach_netdev can be called prior to registering the netdevice: Example stack: ipoib_new_child_link -> ipoib_intf_init-> rdma_init_netdev-> mlx5_rdma_setup_rn-> mlx5e_attach_netdev-> mlx5e_num_channels_changed -> mlx5e_set_default_xps_cpumasks -> netif_set_xps_queue -> __netif_set_xps_queue -> kmalloc If any later stage fails at any point after mlx5e_num_channels_changed() returns, XPS allocated maps will never be freed as they are only freed during netdev unregistration, which will never happen for yet to be registered netdevs. Fixes:3909a12e79("net/mlx5e: Fix configuration of XPS cpumasks and netdev queues in corner cases") Signed-off-by: Saeed Mahameed <saeedm@nvidia.com> Signed-off-by: Aya Levin <ayal@nvidia.com> Reviewed-by: Tariq Toukan <tariqt@nvidia.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
d66083c0d6
commit
fc41e45aa7
@@ -5385,6 +5385,11 @@ err_free_netdev:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void mlx5e_reset_channels(struct net_device *netdev)
|
||||
{
|
||||
netdev_reset_tc(netdev);
|
||||
}
|
||||
|
||||
int mlx5e_attach_netdev(struct mlx5e_priv *priv)
|
||||
{
|
||||
const bool take_rtnl = priv->netdev->reg_state == NETREG_REGISTERED;
|
||||
@@ -5438,6 +5443,7 @@ err_cleanup_tx:
|
||||
profile->cleanup_tx(priv);
|
||||
|
||||
out:
|
||||
mlx5e_reset_channels(priv->netdev);
|
||||
set_bit(MLX5E_STATE_DESTROYING, &priv->state);
|
||||
cancel_work_sync(&priv->update_stats_work);
|
||||
return err;
|
||||
@@ -5455,6 +5461,7 @@ void mlx5e_detach_netdev(struct mlx5e_priv *priv)
|
||||
|
||||
profile->cleanup_rx(priv);
|
||||
profile->cleanup_tx(priv);
|
||||
mlx5e_reset_channels(priv->netdev);
|
||||
cancel_work_sync(&priv->update_stats_work);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user