IB/mlx4: Use GID attribute from ah attribute
authorParav Pandit <parav@mellanox.com>
Wed, 13 Jun 2018 07:22:07 +0000 (10:22 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Mon, 18 Jun 2018 17:11:27 +0000 (11:11 -0600)
While converting GID index from attribute to that of the HCA, GID
attribute is available from the ah_attr. Make use of GID attribute
to simplify the code and also avoid avoid GID query.

Signed-off-by: Parav Pandit <parav@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
drivers/infiniband/hw/mlx4/ah.c
drivers/infiniband/hw/mlx4/main.c
drivers/infiniband/hw/mlx4/mlx4_ib.h
drivers/infiniband/hw/mlx4/qp.c

index 1ab3681..5e9b083 100644 (file)
@@ -105,9 +105,7 @@ static struct ib_ah *create_iboe_ah(struct ib_pd *pd,
                vlan_tag |= (rdma_ah_get_sl(ah_attr) & 7) << 13;
        ah->av.eth.port_pd = cpu_to_be32(to_mpd(pd)->pdn |
                                         (rdma_ah_get_port_num(ah_attr) << 24));
-       ret = mlx4_ib_gid_index_to_real_index(ibdev,
-                                             rdma_ah_get_port_num(ah_attr),
-                                             grh->sgid_index);
+       ret = mlx4_ib_gid_index_to_real_index(ibdev, gid_attr);
        if (ret < 0)
                return ERR_PTR(ret);
        ah->av.eth.gid_index = ret;
index 859089d..908b8e5 100644 (file)
@@ -380,17 +380,15 @@ static int mlx4_ib_del_gid(const struct ib_gid_attr *attr, void **context)
 }
 
 int mlx4_ib_gid_index_to_real_index(struct mlx4_ib_dev *ibdev,
-                                   u8 port_num, int index)
+                                   const struct ib_gid_attr *attr)
 {
        struct mlx4_ib_iboe *iboe = &ibdev->iboe;
        struct gid_cache_context *ctx = NULL;
-       union ib_gid gid;
        struct mlx4_port_gid_table   *port_gid_table;
        int real_index = -EINVAL;
        int i;
-       int ret;
        unsigned long flags;
-       struct ib_gid_attr attr;
+       u8 port_num = attr->port_num;
 
        if (port_num > MLX4_MAX_PORTS)
                return -EINVAL;
@@ -399,21 +397,15 @@ int mlx4_ib_gid_index_to_real_index(struct mlx4_ib_dev *ibdev,
                port_num = 1;
 
        if (!rdma_cap_roce_gid_table(&ibdev->ib_dev, port_num))
-               return index;
-
-       ret = ib_get_cached_gid(&ibdev->ib_dev, port_num, index, &gid, &attr);
-       if (ret)
-               return ret;
-
-       if (attr.ndev)
-               dev_put(attr.ndev);
+               return attr->index;
 
        spin_lock_irqsave(&iboe->lock, flags);
        port_gid_table = &iboe->gids[port_num - 1];
 
        for (i = 0; i < MLX4_MAX_PORT_GIDS; ++i)
-               if (!memcmp(&port_gid_table->gids[i].gid, &gid, sizeof(gid)) &&
-                   attr.gid_type == port_gid_table->gids[i].gid_type) {
+               if (!memcmp(&port_gid_table->gids[i].gid,
+                           &attr->gid, sizeof(attr->gid)) &&
+                   attr->gid_type == port_gid_table->gids[i].gid_type) {
                        ctx = port_gid_table->gids[i].ctx;
                        break;
                }
index 7b14299..88c929e 100644 (file)
@@ -900,7 +900,7 @@ int mlx4_ib_rereg_user_mr(struct ib_mr *mr, int flags,
                          int mr_access_flags, struct ib_pd *pd,
                          struct ib_udata *udata);
 int mlx4_ib_gid_index_to_real_index(struct mlx4_ib_dev *ibdev,
-                                   u8 port_num, int index);
+                                   const struct ib_gid_attr *attr);
 
 void mlx4_sched_ib_sl2vl_update_work(struct mlx4_ib_dev *ibdev,
                                     int port);
index 1538ce6..f800e80 100644 (file)
@@ -1859,8 +1859,7 @@ static int _mlx4_set_path(struct mlx4_ib_dev *dev,
        if (rdma_ah_get_ah_flags(ah) & IB_AH_GRH) {
                const struct ib_global_route *grh = rdma_ah_read_grh(ah);
                int real_sgid_index =
-                       mlx4_ib_gid_index_to_real_index(dev, port,
-                                                       grh->sgid_index);
+                       mlx4_ib_gid_index_to_real_index(dev, grh->sgid_attr);
 
                if (real_sgid_index < 0)
                        return real_sgid_index;