mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-24 11:34:50 +08:00
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: Parav Pandit <parav@mellanox.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
This commit is contained in:
parent
47ec386662
commit
7492052a18
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user