[openib-general] [PATCH v2][RDMA CM] IB mcast fix
Steve Wise
swise at opengridcomputing.com
Fri Aug 18 11:35:24 PDT 2006
Version 2:
- Updated SIDR CMA code to use global qkey.
- Updated udaddy.c to use global qkey.
- Tested with cmatose, udaddy, mckey over mthca/IB.
-----
Set the QKEY to a common global value for all UD QPs and multicast
groups created by the RDMA CM.
Signed-off-by: swise at opengridcomputing.com
Index: src/userspace/librdmacm/include/rdma/rdma_cma_ib.h
===================================================================
--- src/userspace/librdmacm/include/rdma/rdma_cma_ib.h (revision 9004)
+++ src/userspace/librdmacm/include/rdma/rdma_cma_ib.h (working copy)
@@ -59,4 +59,10 @@
struct ibv_ah_attr *ah_attr, uint32_t *remote_qpn,
uint32_t *remote_qkey);
+/*
+ * Global qkey value for all UD QPs and multicast groups created via the
+ * RDMA CM.
+ */
+#define RDMA_UD_QKEY 0x01234567
+
#endif /* RDMA_CMA_IB_H */
Index: src/userspace/librdmacm/src/cma.c
===================================================================
--- src/userspace/librdmacm/src/cma.c (revision 9004)
+++ src/userspace/librdmacm/src/cma.c (working copy)
@@ -701,7 +701,7 @@
qp_attr.port_num = id_priv->id.port_num;
qp_attr.qp_state = IBV_QPS_INIT;
- qp_attr.qkey = ntohs(rdma_get_src_port(&id_priv->id));
+ qp_attr.qkey = RDMA_UD_QKEY;
ret = ibv_modify_qp(qp, &qp_attr, IBV_QP_STATE | IBV_QP_PKEY_INDEX |
IBV_QP_PORT | IBV_QP_QKEY);
if (ret)
Index: src/userspace/librdmacm/examples/udaddy.c
===================================================================
--- src/userspace/librdmacm/examples/udaddy.c (revision 9004)
+++ src/userspace/librdmacm/examples/udaddy.c (working copy)
@@ -434,7 +434,7 @@
node->ah = ibv_create_ah_from_wc(node->pd, wc, node->mem,
node->cma_id->port_num);
node->remote_qpn = ntohl(wc->imm_data);
- node->remote_qkey = ntohs(rdma_get_dst_port(node->cma_id));
+ node->remote_qkey = RDMA_UD_QKEY;
}
static int poll_cqs(void)
Index: src/linux-kernel/infiniband/include/rdma/rdma_cm_ib.h
===================================================================
--- src/linux-kernel/infiniband/include/rdma/rdma_cm_ib.h (revision 9004)
+++ src/linux-kernel/infiniband/include/rdma/rdma_cm_ib.h (working copy)
@@ -82,4 +82,10 @@
*/
int rdma_set_ib_req_info(struct rdma_cm_id *id, struct ib_cm_req_opt *info);
+/*
+ * Global qkey value for all UD QPs and multicast groups created via the
+ * RDMA CM.
+ */
+#define RDMA_UD_QKEY 0x01234567
+
#endif /* RDMA_CM_IB_H */
Index: src/linux-kernel/infiniband/core/cma.c
===================================================================
--- src/linux-kernel/infiniband/core/cma.c (revision 9004)
+++ src/linux-kernel/infiniband/core/cma.c (working copy)
@@ -1822,7 +1822,7 @@
break;
}
route = &id_priv->id.route;
- if (rep->qkey != ntohs(cma_port(&route->addr.dst_addr))) {
+ if (rep->qkey != RDMA_UD_QKEY) {
event = RDMA_CM_EVENT_UNREACHABLE;
status = -EINVAL;
break;
@@ -2012,7 +2012,7 @@
rep.status = status;
if (status == IB_SIDR_SUCCESS) {
rep.qp_num = id_priv->qp_num;
- rep.qkey = ntohs(cma_port(&id_priv->id.route.addr.src_addr));
+ rep.qkey = RDMA_UD_QKEY;
}
return ib_send_cm_sidr_rep(id_priv->cm_id.ib, &rep);
@@ -2172,7 +2172,7 @@
ib_addr_get_sgid(dev_addr, &rec.port_gid);
rec.pkey = cpu_to_be16(ib_addr_get_pkey(dev_addr));
rec.join_state = 1;
- rec.qkey = sin->sin_addr.s_addr;
+ rec.qkey = cpu_to_be32(RDMA_UD_QKEY);
comp_mask = IB_SA_MCMEMBER_REC_MGID | IB_SA_MCMEMBER_REC_PORT_GID |
IB_SA_MCMEMBER_REC_PKEY | IB_SA_MCMEMBER_REC_JOIN_STATE |
More information about the general
mailing list