summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/mellanox/mlx5/core/lag.c
diff options
context:
space:
mode:
authorMohamad Haj Yahia <mohamad@mellanox.com>2016-09-09 17:35:27 +0300
committerDavid S. Miller <davem@davemloft.net>2016-09-10 21:21:50 -0700
commitf1ee87fe55c86d4c5adc804db15b3ed06169fba5 (patch)
treeeb402961d33d629479e50266cc5cae873059d1a9 /drivers/net/ethernet/mellanox/mlx5/core/lag.c
parent9df30601c843aeb9877c966d9d75d4947117c923 (diff)
net/mlx5: Organize device list API in one place
Hide the exposed (external) mlx5_dev_list and mlx5_intf_mutex and expose an organized modular API to manage and manipulate mlx5 devices list. Signed-off-by: Mohamad Haj Yahia <mohamad@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx5/core/lag.c')
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/lag.c24
1 files changed, 5 insertions, 19 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lag.c b/drivers/net/ethernet/mellanox/mlx5/core/lag.c
index 92c3e0dbcbdc..55957246c0e8 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lag.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lag.c
@@ -277,7 +277,7 @@ static void mlx5_do_bond_work(struct work_struct *work)
bond_work);
int status;
- status = mutex_trylock(&mlx5_intf_mutex);
+ status = mlx5_dev_list_trylock();
if (!status) {
/* 1 sec delay. */
mlx5_queue_bond_work(ldev, HZ);
@@ -285,7 +285,7 @@ static void mlx5_do_bond_work(struct work_struct *work)
}
mlx5_do_bond(ldev);
- mutex_unlock(&mlx5_intf_mutex);
+ mlx5_dev_list_unlock();
}
static int mlx5_handle_changeupper_event(struct mlx5_lag *ldev,
@@ -466,35 +466,21 @@ static void mlx5_lag_dev_remove_pf(struct mlx5_lag *ldev,
mutex_unlock(&lag_mutex);
}
-static u16 mlx5_gen_pci_id(struct mlx5_core_dev *dev)
-{
- return (u16)((dev->pdev->bus->number << 8) |
- PCI_SLOT(dev->pdev->devfn));
-}
/* Must be called with intf_mutex held */
void mlx5_lag_add(struct mlx5_core_dev *dev, struct net_device *netdev)
{
struct mlx5_lag *ldev = NULL;
struct mlx5_core_dev *tmp_dev;
- struct mlx5_priv *priv;
- u16 pci_id;
if (!MLX5_CAP_GEN(dev, vport_group_manager) ||
!MLX5_CAP_GEN(dev, lag_master) ||
(MLX5_CAP_GEN(dev, num_lag_ports) != MLX5_MAX_PORTS))
return;
- pci_id = mlx5_gen_pci_id(dev);
-
- mlx5_core_for_each_priv(priv) {
- tmp_dev = container_of(priv, struct mlx5_core_dev, priv);
- if ((dev != tmp_dev) &&
- (mlx5_gen_pci_id(tmp_dev) == pci_id)) {
- ldev = tmp_dev->priv.lag;
- break;
- }
- }
+ tmp_dev = mlx5_get_next_phys_dev(dev);
+ if (tmp_dev)
+ ldev = tmp_dev->priv.lag;
if (!ldev) {
ldev = mlx5_lag_dev_alloc();