net/mlx5: Configure IB devices according to LAG state
authorAviv Heller <avivh@mellanox.com>
Mon, 30 May 2016 15:32:32 +0000 (18:32 +0300)
committerLeon Romanovsky <leon@kernel.org>
Thu, 18 Aug 2016 15:49:58 +0000 (18:49 +0300)
When mlx5_ib is loaded, we would like each card's IB devices
to be added according to its LAG state (one IB device, instead of
two, is to be added if LAG is active).

Signed-off-by: Aviv Heller <avivh@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/lag.c
drivers/net/ethernet/mellanox/mlx5/core/main.c
drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h

index 5fe320c5a60ec11b8ea257fb9b8aae6cb5e8eb72..92c3e0dbcbdc81c08ea3c1dd4f7f5915e33c011a 100644 (file)
@@ -583,3 +583,20 @@ unlock:
 }
 EXPORT_SYMBOL(mlx5_lag_get_roce_netdev);
 
+bool mlx5_lag_intf_add(struct mlx5_interface *intf, struct mlx5_priv *priv)
+{
+       struct mlx5_core_dev *dev = container_of(priv, struct mlx5_core_dev,
+                                                priv);
+       struct mlx5_lag *ldev;
+
+       if (intf->protocol != MLX5_INTERFACE_PROTOCOL_IB)
+               return true;
+
+       ldev = mlx5_lag_dev_get(dev);
+       if (!ldev || !mlx5_lag_is_bonded(ldev) || ldev->pf[0].dev == dev)
+               return true;
+
+       /* If bonded, we do not add an IB device for PF1. */
+       return false;
+}
+
index db7bcfcef3dafa31e0bd7251d9a242527fa5cd7d..28e3ce690e3f42bbfdb2fa3d6ad1dd5d623ec936 100644 (file)
@@ -783,6 +783,9 @@ static void mlx5_add_device(struct mlx5_interface *intf, struct mlx5_priv *priv)
        struct mlx5_device_context *dev_ctx;
        struct mlx5_core_dev *dev = container_of(priv, struct mlx5_core_dev, priv);
 
+       if (!mlx5_lag_intf_add(intf, priv))
+               return;
+
        dev_ctx = kmalloc(sizeof(*dev_ctx), GFP_KERNEL);
        if (!dev_ctx)
                return;
index 8557435280c33f3b1744bf77794a8e33c3e2e437..714b71bed2be0a7a07798d508d27c549cc1c3c31 100644 (file)
@@ -105,6 +105,8 @@ void mlx5_lag_remove(struct mlx5_core_dev *dev);
 void mlx5_add_dev_by_protocol(struct mlx5_core_dev *dev, int protocol);
 void mlx5_remove_dev_by_protocol(struct mlx5_core_dev *dev, int protocol);
 
+bool mlx5_lag_intf_add(struct mlx5_interface *intf, struct mlx5_priv *priv);
+
 void mlx5e_init(void);
 void mlx5e_cleanup(void);