int ompi_mtl_mxm_irecv(struct mca_mtl_base_module_t* mtl, struct ompi_communicator_t *comm, int src, int tag, struct opal_convertor_t *convertor, struct mca_mtl_request_t *mtl_request) { int ret; mxm_error_t err; mxm_recv_req_t *mxm_recv_req; mca_mtl_mxm_request_t * mtl_mxm_request; mtl_mxm_request = (mca_mtl_mxm_request_t*) mtl_request; mxm_recv_req = &mtl_mxm_request->mxm.recv; ompi_mtl_mxm_set_recv_envelope(mxm_recv_req, comm, src, tag); /* prepare a receive request embedded in the MTL request */ ret = ompi_mtl_mxm_recv_init(mtl_mxm_request, convertor, mxm_recv_req); if (OPAL_UNLIKELY(OMPI_SUCCESS != ret)) { return ret; } /* post-recv */ err = mxm_req_recv(mxm_recv_req); if (OPAL_UNLIKELY(MXM_OK != err)) { orte_show_help("help-mtl-mxm.txt", "error posting receive", true, mxm_error_string(err), mtl_mxm_request->buf, mtl_mxm_request->length); return OMPI_ERROR; } return OMPI_SUCCESS; }
int ompi_mtl_mxm_irecv(struct mca_mtl_base_module_t* mtl, struct ompi_communicator_t *comm, int src, int tag, struct opal_convertor_t *convertor, struct mca_mtl_request_t *mtl_request) { mca_mtl_mxm_request_t * mtl_mxm_request; mxm_error_t err; mxm_recv_req_t *mxm_recv_req; int ret; mtl_mxm_request = (mca_mtl_mxm_request_t*) mtl_request; mtl_mxm_request->convertor = convertor; ret = ompi_mtl_datatype_recv_buf(mtl_mxm_request->convertor, &mtl_mxm_request->buf, &mtl_mxm_request->length, &mtl_mxm_request->free_after); if (OMPI_SUCCESS != ret) { return ret; } /* prepare a receive request embedded in the MTL request */ mxm_recv_req = &mtl_mxm_request->mxm.recv; #if MXM_API >= MXM_VERSION(2,0) mtl_mxm_request->is_send = 0; #endif mxm_recv_req->base.state = MXM_REQ_NEW; ompi_mtl_mxm_set_recv_envelope(mxm_recv_req, comm, src, tag); #if MXM_API < MXM_VERSION(2,0) mxm_recv_req->base.flags = 0; #endif mxm_recv_req->base.data_type = MXM_REQ_DATA_BUFFER; mxm_recv_req->base.data.buffer.ptr = mtl_mxm_request->buf; mxm_recv_req->base.data.buffer.length = mtl_mxm_request->length; #if MXM_API < MXM_VERSION(1,5) mxm_recv_req->base.data.buffer.mkey = MXM_MKEY_NONE; #else mxm_recv_req->base.data.buffer.memh = MXM_INVALID_MEM_HANDLE; #endif mxm_recv_req->base.context = mtl_mxm_request; mxm_recv_req->base.completed_cb = ompi_mtl_mxm_recv_completion_cb; /* post-recv */ err = mxm_req_recv(mxm_recv_req); if (MXM_OK != err) { orte_show_help("help-mtl-mxm.txt", "error posting receive", true, mxm_error_string(err), mtl_mxm_request->buf, mtl_mxm_request->length); return OMPI_ERROR; } return OMPI_SUCCESS; }