diff --git a/ompi/mca/mtl/mxm/mtl_mxm_probe.c b/ompi/mca/mtl/mxm/mtl_mxm_probe.c index a09406b521..c0f4101106 100644 --- a/ompi/mca/mtl/mxm/mtl_mxm_probe.c +++ b/ompi/mca/mtl/mxm/mtl_mxm_probe.c @@ -20,11 +20,8 @@ int ompi_mtl_mxm_iprobe(struct mca_mtl_base_module_t* mtl, mxm_error_t err; mxm_recv_req_t req; - req.base.state = MXM_REQ_NEW; - req.base.mq = (mxm_mq_h)comm->c_pml_comm; - req.tag = tag; - req.tag_mask = (tag == MPI_ANY_TAG) ? 0 : 0xffffffffU; - req.base.conn = (src == MPI_ANY_SOURCE) ? NULL : ompi_mtl_mxm_conn_lookup(comm, src); + req.base.state = MXM_REQ_NEW; + ompi_mtl_mxm_set_recv_envelope(&req, comm, src, tag); err = mxm_req_probe(&req); if (MXM_OK == err) { diff --git a/ompi/mca/mtl/mxm/mtl_mxm_recv.c b/ompi/mca/mtl/mxm/mtl_mxm_recv.c index 44c6f49e70..36504021ed 100644 --- a/ompi/mca/mtl/mxm/mtl_mxm_recv.c +++ b/ompi/mca/mtl/mxm/mtl_mxm_recv.c @@ -63,9 +63,8 @@ int ompi_mtl_mxm_irecv(struct mca_mtl_base_module_t* mtl, mxm_recv_req = &mtl_mxm_request->mxm.recv; mxm_recv_req->base.state = MXM_REQ_NEW; - mxm_recv_req->base.mq = ompi_mtl_mxm_mq_lookup(comm); - mxm_recv_req->base.conn = (src == MPI_ANY_SOURCE) ? NULL : - ompi_mtl_mxm_conn_lookup(comm, src); + ompi_mtl_mxm_set_recv_envelope(mxm_recv_req, comm, src, tag); + mxm_recv_req->base.flags = 0; mxm_recv_req->base.data_type = MXM_REQ_DATA_BUFFER; mxm_recv_req->base.data.buffer.ptr = mtl_mxm_request->buf; @@ -73,8 +72,6 @@ int ompi_mtl_mxm_irecv(struct mca_mtl_base_module_t* mtl, mxm_recv_req->base.data.buffer.mkey = MXM_MKEY_NONE; mxm_recv_req->base.context = mtl_mxm_request; mxm_recv_req->base.completed_cb = ompi_mtl_mxm_recv_completion_cb; - mxm_recv_req->tag = tag; - mxm_recv_req->tag_mask = (tag == MPI_ANY_TAG) ? 0 : 0xffffffffU; /* post-recv */ err = mxm_req_recv(mxm_recv_req); diff --git a/ompi/mca/mtl/mxm/mtl_mxm_types.h b/ompi/mca/mtl/mxm/mtl_mxm_types.h index efda09ae67..b5f45f3935 100644 --- a/ompi/mca/mtl/mxm/mtl_mxm_types.h +++ b/ompi/mca/mtl/mxm/mtl_mxm_types.h @@ -68,6 +68,22 @@ static inline int ompi_mtl_mxm_to_mpi_status(mxm_error_t status) { } } +static inline void ompi_mtl_mxm_set_recv_envelope(mxm_recv_req_t *req, + struct ompi_communicator_t *comm, + int src, int tag) { + req->base.mq = (mxm_mq_h)comm->c_pml_comm; + req->base.conn = (src == MPI_ANY_SOURCE) + ? NULL + : ompi_mtl_mxm_conn_lookup(comm, src); + if (tag == MPI_ANY_TAG) { + req->tag = 0; + req->tag_mask = 0x80000000U; /* MPI_ANY_TAG should not match against negative tags */ + } else { + req->tag = tag; + req->tag_mask = 0xffffffffU; + } +} + END_C_DECLS #endif