aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMoni Shoua <monis@mellanox.com>2014-08-21 07:28:39 -0400
committerRoland Dreier <roland@purestorage.com>2014-09-22 12:46:52 -0400
commit655b2aaefc353604f9975c31960d9722e6eda449 (patch)
tree37e810304b486fc336d76f609b9200de47a912ec
parentf5c4834d9328c4ed9fe5dcbec6128d6da16db69a (diff)
IB/mlx4: Reorder steps in RoCE GID table initialization
There's no need to reset the gid table twice and we need to do it only for Ethernet ports. Also, no need to actively scan ndetdevs since it's being done immediatly after we register netdev notifiers. Signed-off-by: Moni Shoua <monis@mellanox.com> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
-rw-r--r--drivers/infiniband/hw/mlx4/main.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
index 16fb2327813a..49965b692042 100644
--- a/drivers/infiniband/hw/mlx4/main.c
+++ b/drivers/infiniband/hw/mlx4/main.c
@@ -1730,24 +1730,33 @@ static int mlx4_ib_init_gid_table(struct mlx4_ib_dev *ibdev)
1730 struct net_device *dev; 1730 struct net_device *dev;
1731 struct mlx4_ib_iboe *iboe = &ibdev->iboe; 1731 struct mlx4_ib_iboe *iboe = &ibdev->iboe;
1732 int i; 1732 int i;
1733 int err = 0;
1733 1734
1734 for (i = 1; i <= ibdev->num_ports; ++i) 1735 for (i = 1; i <= ibdev->num_ports; ++i) {
1735 if (reset_gid_table(ibdev, i)) 1736 if (rdma_port_get_link_layer(&ibdev->ib_dev, i) ==
1736 return -1; 1737 IB_LINK_LAYER_ETHERNET) {
1738 err = reset_gid_table(ibdev, i);
1739 if (err)
1740 goto out;
1741 }
1742 }
1737 1743
1738 read_lock(&dev_base_lock); 1744 read_lock(&dev_base_lock);
1739 spin_lock(&iboe->lock); 1745 spin_lock(&iboe->lock);
1740 1746
1741 for_each_netdev(&init_net, dev) { 1747 for_each_netdev(&init_net, dev) {
1742 u8 port = mlx4_ib_get_dev_port(dev, ibdev); 1748 u8 port = mlx4_ib_get_dev_port(dev, ibdev);
1743 if (port) 1749 /* port will be non-zero only for ETH ports */
1750 if (port) {
1751 mlx4_ib_set_default_gid(ibdev, dev, port);
1744 mlx4_ib_get_dev_addr(dev, ibdev, port); 1752 mlx4_ib_get_dev_addr(dev, ibdev, port);
1753 }
1745 } 1754 }
1746 1755
1747 spin_unlock(&iboe->lock); 1756 spin_unlock(&iboe->lock);
1748 read_unlock(&dev_base_lock); 1757 read_unlock(&dev_base_lock);
1749 1758out:
1750 return 0; 1759 return err;
1751} 1760}
1752 1761
1753static void mlx4_ib_scan_netdevs(struct mlx4_ib_dev *ibdev, 1762static void mlx4_ib_scan_netdevs(struct mlx4_ib_dev *ibdev,
@@ -2202,12 +2211,8 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
2202 } 2211 }
2203 } 2212 }
2204#endif 2213#endif
2205 for (i = 1 ; i <= ibdev->num_ports ; ++i) 2214 if (mlx4_ib_init_gid_table(ibdev))
2206 reset_gid_table(ibdev, i); 2215 goto err_notif;
2207 rtnl_lock();
2208 mlx4_ib_scan_netdevs(ibdev, NULL, 0);
2209 rtnl_unlock();
2210 mlx4_ib_init_gid_table(ibdev);
2211 } 2216 }
2212 2217
2213 for (j = 0; j < ARRAY_SIZE(mlx4_class_attributes); ++j) { 2218 for (j = 0; j < ARRAY_SIZE(mlx4_class_attributes); ++j) {