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 <[email protected]> > --- > 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; _______________________________________________ general mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
