RDMA/mlx5: Use the proper number of ports
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: 4cd14d44b1
("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>
This commit is contained in:
parent
d6d142cb7f
commit
4b83c3caf2
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue