IB/mlx4: Get upper dev addresses as RoCE GIDs when port comes up
authorMoni Shoua <monis@mellanox.com>
Thu, 21 Aug 2014 11:28:40 +0000 (14:28 +0300)
committerRoland Dreier <roland@purestorage.com>
Mon, 22 Sep 2014 16:46:52 +0000 (09:46 -0700)
When a RoCE port becomes active and the netdev of the port has upper
device (e.g bond/team), GIDs derived from the upper dev should appear
in the port's RoCE GID table.

Signed-off-by: Moni Shoua <monis@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/hw/mlx4/main.c

index 49965b6..d404a2e 100644 (file)
@@ -1802,14 +1802,23 @@ static void mlx4_ib_scan_netdevs(struct mlx4_ib_dev *ibdev,
                        port_state = (netif_running(curr_netdev) && netif_carrier_ok(curr_netdev)) ?
                                                IB_PORT_ACTIVE : IB_PORT_DOWN;
                        mlx4_ib_set_default_gid(ibdev, curr_netdev, port);
-                       /* if using bonding/team and a slave port is down, we
-                        * don't the bond IP based gids in the table since
-                        * flows that select port by gid may get the down port.
-                        */
-                       if (curr_master && (port_state == IB_PORT_DOWN)) {
-                               reset_gid_table(ibdev, port);
-                               mlx4_ib_set_default_gid(ibdev,
-                                                       curr_netdev, port);
+                       if (curr_master) {
+                               /* if using bonding/team and a slave port is down, we
+                                * don't want the bond IP based gids in the table since
+                                * flows that select port by gid may get the down port.
+                               */
+                               if (port_state == IB_PORT_DOWN) {
+                                       reset_gid_table(ibdev, port);
+                                       mlx4_ib_set_default_gid(ibdev,
+                                                               curr_netdev,
+                                                               port);
+                               } else {
+                                       /* gids from the upper dev (bond/team)
+                                        * should appear in port's gid table
+                                       */
+                                       mlx4_ib_get_dev_addr(curr_master,
+                                                            ibdev, port);
+                               }
                        }
                        /* if bonding is used it is possible that we add it to
                         * masters only after IP address is assigned to the