[ofa-general] [PATCH] IB/mlx4: Don't register IB device for adapters with no IB ports
Roland Dreier
rdreier at cisco.com
Fri Jan 9 13:45:09 PST 2009
By the way Yevgeny, it seems mlx4_en probably wants something similar?
Otherwise it seems mlx4_en will allocate a bunch of resources for IB
HCAs but not actually create a netdevice...
> If the mlx4_ib driver finds an adapter that has only ethernet ports, the
> current code will register an IB device with 0 ports. Nothing useful or
> sensible can be done with such a device, so just skip registering it.
>
> Signed-off-by: Roland Dreier <rolandd at cisco.com>
> ---
> I'll merge this too unless someone objects strongly. Otherwise if you
> have a system with a ConnectX NIC and a ConnectX IB HCA, you get strange
> results (two mlx4 IB devices, only one of which has any ports)
>
> drivers/infiniband/hw/mlx4/main.c | 13 +++++++++----
> 1 files changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
> index dcefe1f..61588bd 100644
> --- a/drivers/infiniband/hw/mlx4/main.c
> +++ b/drivers/infiniband/hw/mlx4/main.c
> @@ -543,14 +543,21 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
> {
> static int mlx4_ib_version_printed;
> struct mlx4_ib_dev *ibdev;
> + int num_ports = 0;
> int i;
>
> -
> if (!mlx4_ib_version_printed) {
> printk(KERN_INFO "%s", mlx4_ib_version);
> ++mlx4_ib_version_printed;
> }
>
> + mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_IB)
> + num_ports++;
> +
> + /* No point in registering a device with no ports... */
> + if (num_ports == 0)
> + return NULL;
> +
> ibdev = (struct mlx4_ib_dev *) ib_alloc_device(sizeof *ibdev);
> if (!ibdev) {
> dev_err(&dev->pdev->dev, "Device struct alloc failed\n");
> @@ -574,9 +581,7 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
> ibdev->ib_dev.owner = THIS_MODULE;
> ibdev->ib_dev.node_type = RDMA_NODE_IB_CA;
> ibdev->ib_dev.local_dma_lkey = dev->caps.reserved_lkey;
> - ibdev->num_ports = 0;
> - mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_IB)
> - ibdev->num_ports++;
> + ibdev->num_ports = num_ports;
> ibdev->ib_dev.phys_port_cnt = ibdev->num_ports;
> ibdev->ib_dev.num_comp_vectors = dev->caps.num_comp_vectors;
> ibdev->ib_dev.dma_device = &dev->pdev->dev;
More information about the general
mailing list