diff options
Diffstat (limited to 'drivers/infiniband/hw/mlx4/main.c')
| -rw-r--r-- | drivers/infiniband/hw/mlx4/main.c | 20 | 
1 files changed, 14 insertions, 6 deletions
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c index 77f3dbc0aaa1..7b445df6a667 100644 --- a/drivers/infiniband/hw/mlx4/main.c +++ b/drivers/infiniband/hw/mlx4/main.c @@ -177,7 +177,7 @@ mlx4_ib_port_link_layer(struct ib_device *device, u8 port_num)  {  	struct mlx4_dev *dev = to_mdev(device)->dev; -	return dev->caps.port_mask & (1 << (port_num - 1)) ? +	return dev->caps.port_mask[port_num] == MLX4_PORT_TYPE_IB ?  		IB_LINK_LAYER_INFINIBAND : IB_LINK_LAYER_ETHERNET;  } @@ -434,7 +434,7 @@ static int mlx4_ib_modify_device(struct ib_device *ibdev, int mask,  	memset(mailbox->buf, 0, 256);  	memcpy(mailbox->buf, props->node_desc, 64);  	mlx4_cmd(to_mdev(ibdev)->dev, mailbox->dma, 1, 0, -		 MLX4_CMD_SET_NODE, MLX4_CMD_TIME_CLASS_A); +		 MLX4_CMD_SET_NODE, MLX4_CMD_TIME_CLASS_A, MLX4_CMD_WRAPPED);  	mlx4_free_cmd_mailbox(to_mdev(ibdev)->dev, mailbox); @@ -463,7 +463,7 @@ static int mlx4_SET_PORT(struct mlx4_ib_dev *dev, u8 port, int reset_qkey_viols,  	}  	err = mlx4_cmd(dev->dev, mailbox->dma, port, is_eth, MLX4_CMD_SET_PORT, -		       MLX4_CMD_TIME_CLASS_B); +		       MLX4_CMD_TIME_CLASS_B, MLX4_CMD_NATIVE);  	mlx4_free_cmd_mailbox(dev->dev, mailbox);  	return err; @@ -899,7 +899,8 @@ static void update_gids_task(struct work_struct *work)  	memcpy(gids, gw->gids, sizeof gw->gids);  	err = mlx4_cmd(dev, mailbox->dma, MLX4_SET_PORT_GID_TABLE << 8 | gw->port, -		       1, MLX4_CMD_SET_PORT, MLX4_CMD_TIME_CLASS_B); +		       1, MLX4_CMD_SET_PORT, MLX4_CMD_TIME_CLASS_B, +		       MLX4_CMD_NATIVE);  	if (err)  		printk(KERN_WARNING "set port command failed\n");  	else { @@ -1074,6 +1075,11 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)  	printk_once(KERN_INFO "%s", mlx4_ib_version); +	if (mlx4_is_mfunc(dev)) { +		printk(KERN_WARNING "IB not yet supported in SRIOV\n"); +		return NULL; +	} +  	mlx4_foreach_ib_transport_port(i, dev)  		num_ports++; @@ -1244,7 +1250,8 @@ err_reg:  err_counter:  	for (; i; --i) -		mlx4_counter_free(ibdev->dev, ibdev->counters[i - 1]); +		if (ibdev->counters[i - 1] != -1) +			mlx4_counter_free(ibdev->dev, ibdev->counters[i - 1]);  err_map:  	iounmap(ibdev->uar_map); @@ -1275,7 +1282,8 @@ static void mlx4_ib_remove(struct mlx4_dev *dev, void *ibdev_ptr)  	}  	iounmap(ibdev->uar_map);  	for (p = 0; p < ibdev->num_ports; ++p) -		mlx4_counter_free(ibdev->dev, ibdev->counters[p]); +		if (ibdev->counters[p] != -1) +			mlx4_counter_free(ibdev->dev, ibdev->counters[p]);  	mlx4_foreach_port(p, dev, MLX4_PORT_TYPE_IB)  		mlx4_CLOSE_PORT(dev, p);  |