lkml.org 
[lkml]   [2021]   [Feb]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 121/142] net/mlx5e: Correctly handle changing the number of queues when the interface is down
    Date
    From: Maxim Mikityanskiy <maximmi@mellanox.com>

    [ Upstream commit 57ac4a31c48377a3e675b2a731ceacbefefcd34d ]

    This commit addresses two issues related to changing the number of
    queues when the channels are closed:

    1. Missing call to mlx5e_num_channels_changed to update
    real_num_tx_queues when the number of TCs is changed.

    2. When mlx5e_num_channels_changed returns an error, the channel
    parameters must be reverted.

    Two Fixes: tags correspond to the first commits where these two issues
    were introduced.

    Fixes: 3909a12e7913 ("net/mlx5e: Fix configuration of XPS cpumasks and netdev queues in corner cases")
    Fixes: fa3748775b92 ("net/mlx5e: Handle errors from netif_set_real_num_{tx,rx}_queues")
    Signed-off-by: Maxim Mikityanskiy <maximmi@mellanox.com>
    Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c | 8 +++++++-
    drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 7 +++++++
    2 files changed, 14 insertions(+), 1 deletion(-)

    diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
    index f01395a9fd8df..e596f050c4316 100644
    --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
    @@ -444,12 +444,18 @@ int mlx5e_ethtool_set_channels(struct mlx5e_priv *priv,
    goto out;
    }

    - new_channels.params = priv->channels.params;
    + new_channels.params = *cur_params;
    new_channels.params.num_channels = count;

    if (!test_bit(MLX5E_STATE_OPENED, &priv->state)) {
    + struct mlx5e_params old_params;
    +
    + old_params = *cur_params;
    *cur_params = new_channels.params;
    err = mlx5e_num_channels_changed(priv);
    + if (err)
    + *cur_params = old_params;
    +
    goto out;
    }

    diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
    index ba6c75618a710..000dacaa3333c 100644
    --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
    @@ -3580,7 +3580,14 @@ static int mlx5e_setup_tc_mqprio(struct mlx5e_priv *priv,
    new_channels.params.num_tc = tc ? tc : 1;

    if (!test_bit(MLX5E_STATE_OPENED, &priv->state)) {
    + struct mlx5e_params old_params;
    +
    + old_params = priv->channels.params;
    priv->channels.params = new_channels.params;
    + err = mlx5e_num_channels_changed(priv);
    + if (err)
    + priv->channels.params = old_params;
    +
    goto out;
    }

    --
    2.27.0


    \
     
     \ /
      Last update: 2021-02-02 15:03    [W:4.052 / U:0.288 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site