Commit 7492052a authored by Parav Pandit's avatar Parav Pandit Committed by Jason Gunthorpe

IB/mlx4: Use GID attribute from ah attribute

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: default avatarParav Pandit <parav@mellanox.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
parent 47ec3866
...@@ -105,9 +105,7 @@ static struct ib_ah *create_iboe_ah(struct ib_pd *pd, ...@@ -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; vlan_tag |= (rdma_ah_get_sl(ah_attr) & 7) << 13;
ah->av.eth.port_pd = cpu_to_be32(to_mpd(pd)->pdn | ah->av.eth.port_pd = cpu_to_be32(to_mpd(pd)->pdn |
(rdma_ah_get_port_num(ah_attr) << 24)); (rdma_ah_get_port_num(ah_attr) << 24));
ret = mlx4_ib_gid_index_to_real_index(ibdev, ret = mlx4_ib_gid_index_to_real_index(ibdev, gid_attr);
rdma_ah_get_port_num(ah_attr),
grh->sgid_index);
if (ret < 0) if (ret < 0)
return ERR_PTR(ret); return ERR_PTR(ret);
ah->av.eth.gid_index = ret; ah->av.eth.gid_index = ret;
......
...@@ -380,17 +380,15 @@ static int mlx4_ib_del_gid(const struct ib_gid_attr *attr, void **context) ...@@ -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, 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 mlx4_ib_iboe *iboe = &ibdev->iboe;
struct gid_cache_context *ctx = NULL; struct gid_cache_context *ctx = NULL;
union ib_gid gid;
struct mlx4_port_gid_table *port_gid_table; struct mlx4_port_gid_table *port_gid_table;
int real_index = -EINVAL; int real_index = -EINVAL;
int i; int i;
int ret;
unsigned long flags; unsigned long flags;
struct ib_gid_attr attr; u8 port_num = attr->port_num;
if (port_num > MLX4_MAX_PORTS) if (port_num > MLX4_MAX_PORTS)
return -EINVAL; return -EINVAL;
...@@ -399,21 +397,15 @@ int mlx4_ib_gid_index_to_real_index(struct mlx4_ib_dev *ibdev, ...@@ -399,21 +397,15 @@ int mlx4_ib_gid_index_to_real_index(struct mlx4_ib_dev *ibdev,
port_num = 1; port_num = 1;
if (!rdma_cap_roce_gid_table(&ibdev->ib_dev, port_num)) if (!rdma_cap_roce_gid_table(&ibdev->ib_dev, port_num))
return index; return attr->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);
spin_lock_irqsave(&iboe->lock, flags); spin_lock_irqsave(&iboe->lock, flags);
port_gid_table = &iboe->gids[port_num - 1]; port_gid_table = &iboe->gids[port_num - 1];
for (i = 0; i < MLX4_MAX_PORT_GIDS; ++i) for (i = 0; i < MLX4_MAX_PORT_GIDS; ++i)
if (!memcmp(&port_gid_table->gids[i].gid, &gid, sizeof(gid)) && if (!memcmp(&port_gid_table->gids[i].gid,
attr.gid_type == port_gid_table->gids[i].gid_type) { &attr->gid, sizeof(attr->gid)) &&
attr->gid_type == port_gid_table->gids[i].gid_type) {
ctx = port_gid_table->gids[i].ctx; ctx = port_gid_table->gids[i].ctx;
break; break;
} }
......
...@@ -900,7 +900,7 @@ int mlx4_ib_rereg_user_mr(struct ib_mr *mr, int flags, ...@@ -900,7 +900,7 @@ int mlx4_ib_rereg_user_mr(struct ib_mr *mr, int flags,
int mr_access_flags, struct ib_pd *pd, int mr_access_flags, struct ib_pd *pd,
struct ib_udata *udata); struct ib_udata *udata);
int mlx4_ib_gid_index_to_real_index(struct mlx4_ib_dev *ibdev, 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, void mlx4_sched_ib_sl2vl_update_work(struct mlx4_ib_dev *ibdev,
int port); int port);
......
...@@ -1859,8 +1859,7 @@ static int _mlx4_set_path(struct mlx4_ib_dev *dev, ...@@ -1859,8 +1859,7 @@ static int _mlx4_set_path(struct mlx4_ib_dev *dev,
if (rdma_ah_get_ah_flags(ah) & IB_AH_GRH) { if (rdma_ah_get_ah_flags(ah) & IB_AH_GRH) {
const struct ib_global_route *grh = rdma_ah_read_grh(ah); const struct ib_global_route *grh = rdma_ah_read_grh(ah);
int real_sgid_index = int real_sgid_index =
mlx4_ib_gid_index_to_real_index(dev, port, mlx4_ib_gid_index_to_real_index(dev, grh->sgid_attr);
grh->sgid_index);
if (real_sgid_index < 0) if (real_sgid_index < 0)
return real_sgid_index; return real_sgid_index;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment