lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.17 409/772] net/mlx5e: Correct the calculation of max channels for rep
    Date
    From: Moshe Tal <moshet@nvidia.com>

    [ Upstream commit 6d0ba49321a40a8dada22c223bbe91c063b08db4 ]

    Correct the calculation of maximum channels of rep to better utilize
    the hardware resources and allow a larger scale of reps.

    This will allow creation of all virtual ports configured.

    Fixes: 473baf2e9e8c ("net/mlx5e: Allow profile-specific limitation on max num of channels")
    Signed-off-by: Moshe Tal <moshet@nvidia.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.h | 1 +
    drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 9 +++++++++
    drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 10 ++++++++--
    3 files changed, 18 insertions(+), 2 deletions(-)

    diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h
    index c14e06ca64d8..5ccd6c634274 100644
    --- a/drivers/net/ethernet/mellanox/mlx5/core/en.h
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h
    @@ -1188,6 +1188,7 @@ mlx5e_tx_mpwqe_supported(struct mlx5_core_dev *mdev)
    MLX5_CAP_ETH(mdev, enhanced_multi_pkt_send_wqe);
    }

    +int mlx5e_get_pf_num_tirs(struct mlx5_core_dev *mdev);
    int mlx5e_priv_init(struct mlx5e_priv *priv,
    const struct mlx5e_profile *profile,
    struct net_device *netdev,
    diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
    index 3500faf08671..531fffe1abe3 100644
    --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
    @@ -5206,6 +5206,15 @@ mlx5e_calc_max_nch(struct mlx5_core_dev *mdev, struct net_device *netdev,
    return max_nch;
    }

    +int mlx5e_get_pf_num_tirs(struct mlx5_core_dev *mdev)
    +{
    + /* Indirect TIRS: 2 sets of TTCs (inner + outer steering)
    + * and 1 set of direct TIRS
    + */
    + return 2 * MLX5E_NUM_INDIR_TIRS
    + + mlx5e_profile_max_num_channels(mdev, &mlx5e_nic_profile);
    +}
    +
    /* mlx5e generic netdev management API (move to en_common.c) */
    int mlx5e_priv_init(struct mlx5e_priv *priv,
    const struct mlx5e_profile *profile,
    diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
    index 06d1f46f1688..f6a1c5efdb25 100644
    --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
    @@ -592,10 +592,16 @@ bool mlx5e_eswitch_vf_rep(const struct net_device *netdev)
    return netdev->netdev_ops == &mlx5e_netdev_ops_rep;
    }

    +/* One indirect TIR set for outer. Inner not supported in reps. */
    +#define REP_NUM_INDIR_TIRS MLX5E_NUM_INDIR_TIRS
    +
    static int mlx5e_rep_max_nch_limit(struct mlx5_core_dev *mdev)
    {
    - return (1 << MLX5_CAP_GEN(mdev, log_max_tir)) /
    - mlx5_eswitch_get_total_vports(mdev);
    + int max_tir_num = 1 << MLX5_CAP_GEN(mdev, log_max_tir);
    + int num_vports = mlx5_eswitch_get_total_vports(mdev);
    +
    + return (max_tir_num - mlx5e_get_pf_num_tirs(mdev)
    + - (num_vports * REP_NUM_INDIR_TIRS)) / num_vports;
    }

    static void mlx5e_build_rep_params(struct net_device *netdev)
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-06-07 23:12    [W:2.372 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site