lkml.org 
[lkml]   [2021]   [Apr]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 133/188] net/mlx5: Dont request more than supported EQs
    Date
    From: Daniel Jurgens <danielj@mellanox.com>

    [ Upstream commit a7b76002ae78cd230ee652ccdfedf21aa94fcecc ]

    Calculating the number of compeltion EQs based on the number of
    available IRQ vectors doesn't work now that all async EQs share one IRQ.
    Thus the max number of EQs can be exceeded on systems with more than
    approximately 256 CPUs. Take this into account when calculating the
    number of available completion EQs.

    Fixes: 81bfa206032a ("net/mlx5: Use a single IRQ for all async EQs")
    Signed-off-by: Daniel Jurgens <danielj@mellanox.com>
    Reviewed-by: Parav Pandit <parav@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/mellanox/mlx5/core/eq.c | 13 ++++++++++++-
    1 file changed, 12 insertions(+), 1 deletion(-)

    diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eq.c b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
    index 8ebfe782f95e..ccd53a7a2b80 100644
    --- a/drivers/net/ethernet/mellanox/mlx5/core/eq.c
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
    @@ -926,13 +926,24 @@ void mlx5_core_eq_free_irqs(struct mlx5_core_dev *dev)
    mutex_unlock(&table->lock);
    }

    +#ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING
    +#define MLX5_MAX_ASYNC_EQS 4
    +#else
    +#define MLX5_MAX_ASYNC_EQS 3
    +#endif
    +
    int mlx5_eq_table_create(struct mlx5_core_dev *dev)
    {
    struct mlx5_eq_table *eq_table = dev->priv.eq_table;
    + int num_eqs = MLX5_CAP_GEN(dev, max_num_eqs) ?
    + MLX5_CAP_GEN(dev, max_num_eqs) :
    + 1 << MLX5_CAP_GEN(dev, log_max_eq);
    int err;

    eq_table->num_comp_eqs =
    - mlx5_irq_get_num_comp(eq_table->irq_table);
    + min_t(int,
    + mlx5_irq_get_num_comp(eq_table->irq_table),
    + num_eqs - MLX5_MAX_ASYNC_EQS);

    err = create_async_eqs(dev);
    if (err) {
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-04-12 11:41    [W:2.040 / U:0.864 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site