Commit 7a2f64ee authored by Parav Pandit's avatar Parav Pandit Committed by Jason Gunthorpe

RDMA/ucma: Use rdma cm API to query GID

Make use of rdma_read_gids() API to read SGID and DGID which returns
correct GIDs for RoCE and other transports.

rdma_addr_get_dgid() for RoCE for client side connections returns MAC
address, instead of DGID.
rdma_addr_get_sgid() for RoCE doesn't return correct SGID for IPv6 and
when more than one IP address is assigned to the netdevice.

Therefore use transport agnostic rdma_read_gids() API provided by rdma_cm
module.
Signed-off-by: default avatarParav Pandit <parav@mellanox.com>
Reviewed-by: default avatarDaniel Jurgens <danielj@mellanox.com>
Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 411460ac
...@@ -944,8 +944,8 @@ static ssize_t ucma_query_gid(struct ucma_context *ctx, ...@@ -944,8 +944,8 @@ static ssize_t ucma_query_gid(struct ucma_context *ctx,
} else { } else {
addr->sib_family = AF_IB; addr->sib_family = AF_IB;
addr->sib_pkey = (__force __be16) resp.pkey; addr->sib_pkey = (__force __be16) resp.pkey;
rdma_addr_get_sgid(&ctx->cm_id->route.addr.dev_addr, rdma_read_gids(ctx->cm_id, (union ib_gid *)&addr->sib_addr,
(union ib_gid *) &addr->sib_addr); NULL);
addr->sib_sid = rdma_get_service_id(ctx->cm_id, (struct sockaddr *) addr->sib_sid = rdma_get_service_id(ctx->cm_id, (struct sockaddr *)
&ctx->cm_id->route.addr.src_addr); &ctx->cm_id->route.addr.src_addr);
} }
...@@ -957,8 +957,8 @@ static ssize_t ucma_query_gid(struct ucma_context *ctx, ...@@ -957,8 +957,8 @@ static ssize_t ucma_query_gid(struct ucma_context *ctx,
} else { } else {
addr->sib_family = AF_IB; addr->sib_family = AF_IB;
addr->sib_pkey = (__force __be16) resp.pkey; addr->sib_pkey = (__force __be16) resp.pkey;
rdma_addr_get_dgid(&ctx->cm_id->route.addr.dev_addr, rdma_read_gids(ctx->cm_id, NULL,
(union ib_gid *) &addr->sib_addr); (union ib_gid *)&addr->sib_addr);
addr->sib_sid = rdma_get_service_id(ctx->cm_id, (struct sockaddr *) addr->sib_sid = rdma_get_service_id(ctx->cm_id, (struct sockaddr *)
&ctx->cm_id->route.addr.dst_addr); &ctx->cm_id->route.addr.dst_addr);
} }
......
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