netif_set_xps_queue must be called with the rtnl lock taken, and this is now enforced using ASSERT_RTNL(). mlx5e_attach_netdev was taking the lock conditionally, fix this by taking the rtnl lock all the time.
Signed-off-by: Antoine Tenart <aten...@kernel.org> --- drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c index ec2fcb2a2977..96cba86b9f0d 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c @@ -5557,7 +5557,6 @@ static void mlx5e_update_features(struct net_device *netdev) int mlx5e_attach_netdev(struct mlx5e_priv *priv) { - const bool take_rtnl = priv->netdev->reg_state == NETREG_REGISTERED; const struct mlx5e_profile *profile = priv->profile; int max_nch; int err; @@ -5578,15 +5577,11 @@ int mlx5e_attach_netdev(struct mlx5e_priv *priv) * 2. Set our default XPS cpumask. * 3. Build the RQT. * - * rtnl_lock is required by netif_set_real_num_*_queues in case the - * netdev has been registered by this point (if this function was called - * in the reload or resume flow). + * rtnl_lock is required by netif_set_xps_queue. */ - if (take_rtnl) - rtnl_lock(); + rtnl_lock(); err = mlx5e_num_channels_changed(priv); - if (take_rtnl) - rtnl_unlock(); + rtnl_unlock(); if (err) goto out; -- 2.29.2