mlx4: Activate SR-IOV mode for IB
authorJack Morgenstein <jackm@dev.mellanox.co.il>
Fri, 3 Aug 2012 08:40:55 +0000 (08:40 +0000)
committerRoland Dreier <roland@purestorage.com>
Mon, 1 Oct 2012 03:33:42 +0000 (20:33 -0700)
Remove the error returns for IB ports from mlx4_ib_add,
mlx4_INIT_PORT_wrapper, and mlx4_CLOSE_PORT_wrapper.

Currently, SRIOV is supported only for devices for which the
link layer is IB on all ports; RoCE support will be added later.

Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/hw/mlx4/main.c
drivers/net/ethernet/mellanox/mlx4/fw.c
include/linux/mlx4/device.h

index 46303b2..e849347 100644 (file)
@@ -1293,11 +1293,15 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
 
        pr_info_once("%s", mlx4_ib_version);
 
-       if (mlx4_is_mfunc(dev)) {
-               pr_warn("IB not yet supported in SRIOV\n");
+       mlx4_foreach_non_ib_transport_port(i, dev)
+               num_ports++;
+
+       if (mlx4_is_mfunc(dev) && num_ports) {
+               dev_err(&dev->pdev->dev, "RoCE is not supported over SRIOV as yet\n");
                return NULL;
        }
 
+       num_ports = 0;
        mlx4_foreach_ib_transport_port(i, dev)
                num_ports++;
 
index bf159c0..1d74e85 100644 (file)
@@ -1391,9 +1391,6 @@ int mlx4_INIT_PORT_wrapper(struct mlx4_dev *dev, int slave,
        if (priv->mfunc.master.slave_state[slave].init_port_mask & (1 << port))
                return 0;
 
-       if (dev->caps.port_mask[port] == MLX4_PORT_TYPE_IB)
-               return -ENODEV;
-
        if (dev->caps.port_mask[port] != MLX4_PORT_TYPE_IB) {
                /* Enable port only if it was previously disabled */
                if (!priv->mfunc.master.init_port_ref[port]) {
@@ -1489,9 +1486,6 @@ int mlx4_CLOSE_PORT_wrapper(struct mlx4_dev *dev, int slave,
            (1 << port)))
                return 0;
 
-       if (dev->caps.port_mask[port] == MLX4_PORT_TYPE_IB)
-               return -ENODEV;
-
        if (dev->caps.port_mask[port] != MLX4_PORT_TYPE_IB) {
                if (priv->mfunc.master.init_port_ref[port] == 1) {
                        err = mlx4_cmd(dev, 0, port, 0, MLX4_CMD_CLOSE_PORT,
index b3f9b45..9b243df 100644 (file)
@@ -697,6 +697,10 @@ struct mlx4_init_port_param {
        for ((port) = 1; (port) <= (dev)->caps.num_ports; (port)++)     \
                if ((type) == (dev)->caps.port_mask[(port)])
 
+#define mlx4_foreach_non_ib_transport_port(port, dev)                     \
+       for ((port) = 1; (port) <= (dev)->caps.num_ports; (port)++)       \
+               if (((dev)->caps.port_mask[port] != MLX4_PORT_TYPE_IB))
+
 #define mlx4_foreach_ib_transport_port(port, dev)                         \
        for ((port) = 1; (port) <= (dev)->caps.num_ports; (port)++)       \
                if (((dev)->caps.port_mask[port] == MLX4_PORT_TYPE_IB) || \