[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