net/mlx5: Add support to get lag physical port
authorMaor Gottlieb <maorg@mellanox.com>
Thu, 30 Apr 2020 19:21:41 +0000 (22:21 +0300)
committerSaeed Mahameed <saeedm@mellanox.com>
Fri, 1 May 2020 19:15:38 +0000 (12:15 -0700)
Add function to get the device physical port of the lag slave.

Signed-off-by: Maor Gottlieb <maorg@mellanox.com>
Reviewed-by: Leon Romanovsky <leonro@mellanox.com>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
drivers/net/ethernet/mellanox/mlx5/core/lag.c
include/linux/mlx5/driver.h

index b17b80b..874c70e 100644 (file)
@@ -687,6 +687,30 @@ unlock:
 }
 EXPORT_SYMBOL(mlx5_lag_get_roce_netdev);
 
+u8 mlx5_lag_get_slave_port(struct mlx5_core_dev *dev,
+                          struct net_device *slave)
+{
+       struct mlx5_lag *ldev;
+       u8 port = 0;
+
+       spin_lock(&lag_lock);
+       ldev = mlx5_lag_dev_get(dev);
+       if (!(ldev && __mlx5_lag_is_roce(ldev)))
+               goto unlock;
+
+       if (ldev->pf[MLX5_LAG_P1].netdev == slave)
+               port = MLX5_LAG_P1;
+       else
+               port = MLX5_LAG_P2;
+
+       port = ldev->v2p_map[port];
+
+unlock:
+       spin_unlock(&lag_lock);
+       return port;
+}
+EXPORT_SYMBOL(mlx5_lag_get_slave_port);
+
 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,
index d82dbba..267dfcc 100644 (file)
@@ -1074,6 +1074,8 @@ bool mlx5_lag_is_sriov(struct mlx5_core_dev *dev);
 bool mlx5_lag_is_multipath(struct mlx5_core_dev *dev);
 bool mlx5_lag_is_active(struct mlx5_core_dev *dev);
 struct net_device *mlx5_lag_get_roce_netdev(struct mlx5_core_dev *dev);
+u8 mlx5_lag_get_slave_port(struct mlx5_core_dev *dev,
+                          struct net_device *slave);
 int mlx5_lag_query_cong_counters(struct mlx5_core_dev *dev,
                                 u64 *values,
                                 int num_counters,