diff --git a/src/mca/ptl/ib/src/ptl_ib_priv.c b/src/mca/ptl/ib/src/ptl_ib_priv.c index 7a0ee96daa..3cec2c1c66 100644 --- a/src/mca/ptl/ib/src/ptl_ib_priv.c +++ b/src/mca/ptl/ib/src/ptl_ib_priv.c @@ -453,6 +453,8 @@ int mca_ptl_ib_peer_connect(mca_ptl_ib_state_t *ib_state, { int rc, i; VAPI_ret_t ret; + VAPI_qp_num_t qp_num; + ib_buffer_t *ib_buf_ptr; /* Establish Reliable Connection */ rc = mca_ptl_ib_rc_qp_init(ib_state->nic, @@ -479,6 +481,8 @@ int mca_ptl_ib_peer_connect(mca_ptl_ib_state_t *ib_state, return OMPI_ERR_OUT_OF_RESOURCE; } + qp_num = peer_conn->rres->qp_num; + /* Register the buffers */ for(i = 0; i < NUM_IB_SEND_BUF; i++) { @@ -488,12 +492,14 @@ int mca_ptl_ib_peer_connect(mca_ptl_ib_state_t *ib_state, if(rc != OMPI_SUCCESS) { return OMPI_ERROR; } + + ib_buf_ptr = &peer_conn->lres->send[i]; + + IB_PREPARE_SEND_DESC(ib_buf_ptr, qp_num); } for(i = 0; i < NUM_IB_RECV_BUF; i++) { - ib_buffer_t *ib_buf_ptr; - rc = mca_ptl_ib_register_mem(ib_state->nic, ib_state->ptag, (void*) peer_conn->lres->recv[i].buf, 4096, &peer_conn->lres->recv[i].hndl); @@ -501,7 +507,9 @@ int mca_ptl_ib_peer_connect(mca_ptl_ib_state_t *ib_state, return OMPI_ERROR; } - IB_PREPARE_RECV_DESC((&peer_conn->lres->recv[i])); + ib_buf_ptr = &peer_conn->lres->recv[i]; + + IB_PREPARE_RECV_DESC(ib_buf_ptr); } /* Post receives */ diff --git a/src/mca/ptl/ib/src/ptl_ib_priv.h b/src/mca/ptl/ib/src/ptl_ib_priv.h index eb7b9d4c03..934f5eaba7 100644 --- a/src/mca/ptl/ib/src/ptl_ib_priv.h +++ b/src/mca/ptl/ib/src/ptl_ib_priv.h @@ -151,6 +151,21 @@ typedef struct mca_ptl_ib_peer_conn_t mca_ptl_ib_peer_conn_t; (MT_virt_addr_t) ib_buf_ptr->buf; \ } +#define IB_PREPARE_SEND_DESC(ib_buf_ptr, qp) { \ + ib_buf_ptr->desc.sr.comp_type = VAPI_SIGNALED; \ + ib_buf_ptr->desc.sr.opcode = VAPI_SEND; \ + ib_buf_ptr->desc.sr.remote_qkey = 0; \ + ib_buf_ptr->desc.sr.remote_qp = qp; \ + ib_buf_ptr->desc.sr.id = (VAPI_virt_addr_t) \ + (MT_virt_addr_t) ib_buf_ptr; \ + ib_buf_ptr->desc.rr.sg_lst_len = 1; \ + ib_buf_ptr->desc.rr.sg_lst_p = &ib_buf_ptr->desc.sg_entry; \ + ib_buf_ptr->desc.sg_entry.len = 4096; \ + ib_buf_ptr->desc.sg_entry.lkey = ib_buf_ptr->hndl.lkey; \ + ib_buf_ptr->desc.sg_entry.addr = (VAPI_virt_addr_t) \ + (MT_virt_addr_t) ib_buf_ptr->buf; \ +} + int mca_ptl_ib_init_module(mca_ptl_ib_state_t*, int); int mca_ptl_ib_get_num_hcas(uint32_t*); int mca_ptl_ib_init_peer(mca_ptl_ib_state_t*, mca_ptl_ib_peer_conn_t*);