[openib-general] [PATCH 2/3] uDAPL cma: fix issues with creating qp without rcv resources
Arlin Davis
arlin.r.davis at intel.com
Mon Nov 6 14:44:31 PST 2006
Fix some issues supporting create qp without recv cq handle or recv qp resources. IB verbs assume a
recv_cq handle and uDAPL dapl_ep_create assumes there is always recv_sge resources specified.
Signed-off by: Arlin Davis ardavis at ichips.intel.com
Index: dapl/common/dapl_ep_create.c
===================================================================
--- dapl/common/dapl_ep_create.c (revision 10032)
+++ dapl/common/dapl_ep_create.c (working copy)
@@ -166,7 +166,7 @@ dapl_ep_create (
(recv_evd_handle != DAT_HANDLE_NULL && ep_attr->max_recv_dtos == 0) ||
(request_evd_handle == DAT_HANDLE_NULL && ep_attr->max_request_dtos != 0) ||
(request_evd_handle != DAT_HANDLE_NULL && ep_attr->max_request_dtos == 0) ||
- ep_attr->max_recv_iov == 0 ||
+ (recv_evd_handle != DAT_HANDLE_NULL && ep_attr->max_recv_iov == 0) ||
ep_attr->max_request_iov == 0 ||
(DAT_SUCCESS != dapl_ep_check_recv_completion_flags (
ep_attr->recv_completion_flags)) ))
Index: dapl/openib_cma/dapl_ib_qp.c
===================================================================
--- dapl/openib_cma/dapl_ib_qp.c (revision 10032)
+++ dapl/openib_cma/dapl_ib_qp.c (working copy)
@@ -143,13 +143,21 @@ DAT_RETURN dapls_ib_qp_alloc(IN DAPL_IA
/* Setup attributes and create qp */
dapl_os_memzero((void*)&qp_create, sizeof(qp_create));
qp_create.cap.max_send_wr = attr->max_request_dtos;
- qp_create.cap.max_recv_wr = attr->max_recv_dtos;
qp_create.cap.max_send_sge = attr->max_request_iov;
- qp_create.cap.max_recv_sge = attr->max_recv_iov;
qp_create.cap.max_inline_data =
ia_ptr->hca_ptr->ib_trans.max_inline_send;
qp_create.send_cq = req_cq;
- qp_create.recv_cq = rcv_cq;
+
+ /* ibv assumes rcv_cq is never NULL, set to req_cq */
+ if (rcv_cq == NULL) {
+ qp_create.recv_cq = req_cq;
+ qp_create.cap.max_recv_wr = 0;
+ qp_create.cap.max_recv_sge = 0;
+ } else {
+ qp_create.recv_cq = rcv_cq;
+ qp_create.cap.max_recv_wr = attr->max_recv_dtos;
+ qp_create.cap.max_recv_sge = attr->max_recv_iov;
+ }
qp_create.qp_type = IBV_QPT_RC;
qp_create.qp_context = (void*)ep_ptr;
More information about the general
mailing list