lkml.org 
[lkml]   [2022]   [Aug]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.19 186/365] RDMA/mlx5: Use the proper number of ports
    Date
    From: Mark Bloch <mbloch@nvidia.com>

    commit 4b83c3caf289b80acecc539c79f10a6937cc42dd upstream.

    The cited commit allowed the driver to operate over HCAs that have
    4 physical ports. Use the number of ports of the RDMA device in the for
    loop instead of using the struct size.

    Fixes: 4cd14d44b11d ("net/mlx5: Support devices with more than 2 ports")
    Link: https://lore.kernel.org/r/a54a56c2ede16044a29d119209b35189c662ac72.1659944855.git.leonro@nvidia.com
    Signed-off-by: Mark Bloch <mbloch@nvidia.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/infiniband/hw/mlx5/main.c | 34 +++++++++++++++----------------
    1 file changed, 16 insertions(+), 18 deletions(-)

    diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
    index a174a0eee8dc..fc94a1b25485 100644
    --- a/drivers/infiniband/hw/mlx5/main.c
    +++ b/drivers/infiniband/hw/mlx5/main.c
    @@ -2738,26 +2738,24 @@ static int set_has_smi_cap(struct mlx5_ib_dev *dev)
    int err;
    int port;

    - for (port = 1; port <= ARRAY_SIZE(dev->port_caps); port++) {
    - dev->port_caps[port - 1].has_smi = false;
    - if (MLX5_CAP_GEN(dev->mdev, port_type) ==
    - MLX5_CAP_PORT_TYPE_IB) {
    - if (MLX5_CAP_GEN(dev->mdev, ib_virt)) {
    - err = mlx5_query_hca_vport_context(dev->mdev, 0,
    - port, 0,
    - &vport_ctx);
    - if (err) {
    - mlx5_ib_err(dev, "query_hca_vport_context for port=%d failed %d\n",
    - port, err);
    - return err;
    - }
    - dev->port_caps[port - 1].has_smi =
    - vport_ctx.has_smi;
    - } else {
    - dev->port_caps[port - 1].has_smi = true;
    - }
    + if (MLX5_CAP_GEN(dev->mdev, port_type) != MLX5_CAP_PORT_TYPE_IB)
    + return 0;
    +
    + for (port = 1; port <= dev->num_ports; port++) {
    + if (!MLX5_CAP_GEN(dev->mdev, ib_virt)) {
    + dev->port_caps[port - 1].has_smi = true;
    + continue;
    }
    + err = mlx5_query_hca_vport_context(dev->mdev, 0, port, 0,
    + &vport_ctx);
    + if (err) {
    + mlx5_ib_err(dev, "query_hca_vport_context for port=%d failed %d\n",
    + port, err);
    + return err;
    + }
    + dev->port_caps[port - 1].has_smi = vport_ctx.has_smi;
    }
    +
    return 0;
    }

    --
    2.37.2


    \
     
     \ /
      Last update: 2022-09-17 16:27    [W:4.105 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site