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 [EMAIL PROTECTED]


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;
 


_______________________________________________
openib-general mailing list
openib-general@openib.org
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to