|
@@ -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,
|
|
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;
|
|
|
|
-
|
|
|
|
- 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);
|
|
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)) &&
|
|
|
|
- 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;
|
|
ctx = port_gid_table->gids[i].ctx;
|
|
break;
|
|
break;
|
|
}
|
|
}
|