commits
Threads by month
- ----- 2026 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
July 2014
- 1 participants
- 63 discussions
[mpich] MPICH primary repository branch, master, updated. v3.1.2-13-g494f597
by noreply@mpich.org 29 Jul '14
by noreply@mpich.org 29 Jul '14
29 Jul '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via 494f597b956c4a1557c986848e3b5eabb80faa32 (commit)
from a3fc775402614eda55b34b6d5db51d1555e36653 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/494f597b956c4a1557c986848e3b5eabb…
commit 494f597b956c4a1557c986848e3b5eabb80faa32
Author: Antonio Pena Monferrer <apenya(a)mcs.anl.gov>
Date: Mon Jul 28 12:45:37 2014 -0500
Fixed datatype displacement use in portals4 netmod
The current implementation was not taking into account the datatype offset.
These changes mainly add the "dt_true_lb" field from the MPIDI_Datatype_get_info
function to the user-specified buffer pointer.
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_recv.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_recv.c
index 6760165..712e006 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_recv.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_recv.c
@@ -91,12 +91,15 @@ static int handler_recv_dequeue_complete(const ptl_event_t *e)
/* unpack the data from unexpected buffer */
int is_contig;
MPI_Aint last;
+ MPI_Aint dt_true_lb;
+ MPIDI_msg_sz_t data_sz ATTRIBUTE((unused));
+ MPID_Datatype *dt_ptr ATTRIBUTE((unused));
- MPID_Datatype_is_contig(rreq->dev.datatype, &is_contig);
+ MPIDI_Datatype_get_info(rreq->dev.user_count, rreq->dev.datatype, is_contig, data_sz, dt_ptr, dt_true_lb);
MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "is_contig = %d", is_contig);
if (is_contig) {
- MPIU_Memcpy(rreq->dev.user_buf, e->start, e->mlength);
+ MPIU_Memcpy((char *)rreq->dev.user_buf + dt_true_lb, e->start, e->mlength);
} else {
last = e->mlength;
MPID_Segment_unpack(rreq->dev.segment_ptr, 0, &last, e->start);
@@ -204,7 +207,7 @@ static int handler_recv_dequeue_large(const ptl_event_t *e)
/* unpack data from unexpected buffer first */
if (e->type == PTL_EVENT_PUT_OVERFLOW) {
if (dt_contig) {
- MPIU_Memcpy(rreq->dev.user_buf, e->start, e->mlength);
+ MPIU_Memcpy((char *)rreq->dev.user_buf + dt_true_lb, e->start, e->mlength);
} else {
rreq->dev.segment_first = 0;
last = e->mlength;
@@ -227,10 +230,10 @@ static int handler_recv_dequeue_large(const ptl_event_t *e)
if (dt_contig) {
/* recv buffer is contig */
REQ_PTL(rreq)->event_handler = handler_recv_complete;
- ret = PtlGet(MPIDI_nem_ptl_global_md, (ptl_size_t)rreq->dev.user_buf + PTL_LARGE_THRESHOLD, data_sz - PTL_LARGE_THRESHOLD,
- vc_ptl->id, vc_ptl->ptg, e->match_bits, 0, rreq);
+ ret = PtlGet(MPIDI_nem_ptl_global_md, (ptl_size_t)((char *)rreq->dev.user_buf + dt_true_lb + PTL_LARGE_THRESHOLD),
+ data_sz - PTL_LARGE_THRESHOLD, vc_ptl->id, vc_ptl->ptg, e->match_bits, 0, rreq);
DBG_MSG_GET("global", data_sz - PTL_LARGE_THRESHOLD, vc->pg_rank, e->match_bits);
- MPIU_DBG_MSG_P(CH3_CHANNEL, VERBOSE, " buf=%p", (char *)rreq->dev.user_buf + PTL_LARGE_THRESHOLD);
+ MPIU_DBG_MSG_P(CH3_CHANNEL, VERBOSE, " buf=%p", (char *)rreq->dev.user_buf + dt_true_lb + PTL_LARGE_THRESHOLD);
MPIU_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlget", "**ptlget %s", MPID_nem_ptl_strerror(ret));
goto fn_exit;
}
@@ -393,7 +396,7 @@ int MPID_nem_ptl_recv_posted(MPIDI_VC_t *vc, MPID_Request *rreq)
if (dt_contig) {
/* small contig message */
MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "Small contig message");
- me.start = rreq->dev.user_buf;
+ me.start = (char *)rreq->dev.user_buf + dt_true_lb;
me.length = data_sz;
REQ_PTL(rreq)->event_handler = handler_recv_dequeue_complete;
} else {
@@ -431,7 +434,7 @@ int MPID_nem_ptl_recv_posted(MPIDI_VC_t *vc, MPID_Request *rreq)
if (dt_contig) {
/* large contig message */
MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "Large contig message");
- me.start = rreq->dev.user_buf;
+ me.start = (char *)rreq->dev.user_buf + dt_true_lb;
me.length = PTL_LARGE_THRESHOLD;
REQ_PTL(rreq)->event_handler = handler_recv_dequeue_large;
} else {
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_send.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_send.c
index ae2120a..a642fbd 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_send.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_send.c
@@ -207,7 +207,7 @@ static int send_msg(ptl_hdr_data_t ssend_flag, struct MPIDI_VC *vc, const void *
MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "Small contig message");
REQ_PTL(sreq)->event_handler = handler_send_complete;
MPIU_DBG_MSG_P(CH3_CHANNEL, VERBOSE, "&REQ_PTL(sreq)->event_handler = %p", &(REQ_PTL(sreq)->event_handler));
- ret = PtlPut(MPIDI_nem_ptl_global_md, (ptl_size_t)buf, data_sz, PTL_ACK_REQ, vc_ptl->id, vc_ptl->pt,
+ ret = PtlPut(MPIDI_nem_ptl_global_md, (ptl_size_t)((char *)buf + dt_true_lb), data_sz, PTL_ACK_REQ, vc_ptl->id, vc_ptl->pt,
NPTL_MATCH(tag, comm->context_id + context_offset, comm->rank), 0, sreq,
NPTL_HEADER(ssend_flag, data_sz));
MPIU_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlput", "**ptlput %s", MPID_nem_ptl_strerror(ret));
-----------------------------------------------------------------------
Summary of changes:
.../channels/nemesis/netmod/portals4/ptl_recv.c | 19 +++++++++++--------
.../channels/nemesis/netmod/portals4/ptl_send.c | 2 +-
2 files changed, 12 insertions(+), 9 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.2-12-ga3fc775
by noreply@mpich.org 28 Jul '14
by noreply@mpich.org 28 Jul '14
28 Jul '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via a3fc775402614eda55b34b6d5db51d1555e36653 (commit)
from 276ca460ec7a6b7f71ab53b46268eb07a2522a83 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/a3fc775402614eda55b34b6d5db51d155…
commit a3fc775402614eda55b34b6d5db51d1555e36653
Author: Rob Latham <robl(a)mcs.anl.gov>
Date: Wed Jul 23 14:24:33 2014 -0500
generated too-long a value for MPI Info key
large numbers of I/O aggregators would result in a value longer than
MPI_MAX_INFO_VAL. A guard was in place but my logic for limiting the
length of the array was incorrect.
Signed-off-by: Wesley Bland <wbland(a)anl.gov>
diff --git a/src/mpi/romio/adio/common/cb_config_list.c b/src/mpi/romio/adio/common/cb_config_list.c
index 64ad7ed..0eebc43 100644
--- a/src/mpi/romio/adio/common/cb_config_list.c
+++ b/src/mpi/romio/adio/common/cb_config_list.c
@@ -94,9 +94,15 @@ int ADIOI_cb_bcast_rank_map(ADIO_File fd)
ADIOI_Info_set(fd->info, "cb_nodes", value);
char *p = value;
int i;
+ /* the (by MPI rank) list of aggregators can be larger than
+ * MPI_MAX_INFO_VAL, so we will simply truncate when we reach capacity. I
+ * wasn't clever enough to figure out how to rewind and put '...' at the
+ * end in the truncate case */
for (i=0; i< fd->hints->cb_nodes; i++) {
- p += ADIOI_Snprintf(p, MPI_MAX_INFO_VAL+1, "%d ", fd->hints->ranklist[i]);
- if (p - value > MPI_MAX_INFO_VAL+1) break;
+ int incr, remain = (MPI_MAX_INFO_VAL) - (p-value);
+ incr = ADIOI_Snprintf(p, remain, "%d ", fd->hints->ranklist[i]);
+ if (incr >= remain) break;
+ p += incr;
}
ADIOI_Info_set(fd->info, "romio_aggregator_list", value);
ADIOI_Free(value);
-----------------------------------------------------------------------
Summary of changes:
src/mpi/romio/adio/common/cb_config_list.c | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.2-11-g276ca46
by noreply@mpich.org 23 Jul '14
by noreply@mpich.org 23 Jul '14
23 Jul '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via 276ca460ec7a6b7f71ab53b46268eb07a2522a83 (commit)
from 020c33d656620fd1269d9f92c7a0c424f0b0a3c3 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/276ca460ec7a6b7f71ab53b46268eb07a…
commit 276ca460ec7a6b7f71ab53b46268eb07a2522a83
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Wed Jul 23 08:52:58 2014 -0500
White-space cleanup.
No reviewer.
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_cancel.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_cancel.c
index 2a689b0..6144ace 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_cancel.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_cancel.c
@@ -13,7 +13,7 @@
#define FUNCNAME MPID_nem_mxm_cancel_send
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_cancel_send(MPIDI_VC_t *vc, MPID_Request *req)
+int MPID_nem_mxm_cancel_send(MPIDI_VC_t * vc, MPID_Request * req)
{
int mpi_errno = MPI_SUCCESS;
mxm_error_t ret = MXM_OK;
@@ -27,17 +27,18 @@ int MPID_nem_mxm_cancel_send(MPIDI_VC_t *vc, MPID_Request *req)
if (MPIR_STATUS_GET_CANCEL_BIT(req->status)) {
(VC_FIELD(req->ch.vc, pending_sends)) -= 1;
}
- } else {
+ }
+ else {
mpi_errno = MPI_ERR_INTERN;
}
}
_dbg_mxm_out_req(req);
- fn_exit:
+ fn_exit:
return mpi_errno;
- fn_fail: ATTRIBUTE((unused))
- goto fn_exit;
+ fn_fail:ATTRIBUTE((unused))
+ goto fn_exit;
}
@@ -45,7 +46,7 @@ int MPID_nem_mxm_cancel_send(MPIDI_VC_t *vc, MPID_Request *req)
#define FUNCNAME MPID_nem_mxm_cancel_recv
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_cancel_recv(MPIDI_VC_t *vc, MPID_Request *req)
+int MPID_nem_mxm_cancel_recv(MPIDI_VC_t * vc, MPID_Request * req)
{
int mpi_errno = MPI_SUCCESS;
mxm_error_t ret = MXM_OK;
@@ -56,15 +57,16 @@ int MPID_nem_mxm_cancel_recv(MPIDI_VC_t *vc, MPID_Request *req)
ret = mxm_req_cancel_recv(&REQ_FIELD(req, mxm_req->item.recv));
if ((MXM_OK == ret) || (MXM_ERR_NO_PROGRESS == ret)) {
_mxm_req_wait(&REQ_FIELD(req, mxm_req->item.base));
- } else {
+ }
+ else {
mpi_errno = MPI_ERR_INTERN;
}
}
_dbg_mxm_out_req(req);
- fn_exit:
+ fn_exit:
return mpi_errno;
- fn_fail: ATTRIBUTE((unused))
- goto fn_exit;
+ fn_fail:ATTRIBUTE((unused))
+ goto fn_exit;
}
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_finalize.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_finalize.c
index 5c5a515..e2c3f02 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_finalize.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_finalize.c
@@ -7,5 +7,3 @@
#include "mxm_impl.h"
-
-
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_impl.h b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_impl.h
index 7aa8f2f..90ad8b8 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_impl.h
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_impl.h
@@ -17,92 +17,97 @@
#endif
-int MPID_nem_mxm_init(MPIDI_PG_t *pg_p, int pg_rank, char **bc_val_p, int *val_max_sz_p);
+int MPID_nem_mxm_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_max_sz_p);
int MPID_nem_mxm_finalize(void);
int MPID_nem_mxm_poll(int in_blocking_progress);
int MPID_nem_mxm_get_business_card(int my_rank, char **bc_val_p, int *val_max_sz_p);
-int MPID_nem_mxm_connect_to_root(const char *business_card, MPIDI_VC_t *new_vc);
-int MPID_nem_mxm_vc_init(MPIDI_VC_t *vc);
-int MPID_nem_mxm_vc_destroy(MPIDI_VC_t *vc);
-int MPID_nem_mxm_vc_terminate(MPIDI_VC_t *vc);
+int MPID_nem_mxm_connect_to_root(const char *business_card, MPIDI_VC_t * new_vc);
+int MPID_nem_mxm_vc_init(MPIDI_VC_t * vc);
+int MPID_nem_mxm_vc_destroy(MPIDI_VC_t * vc);
+int MPID_nem_mxm_vc_terminate(MPIDI_VC_t * vc);
/* alternate interface */
-int MPID_nem_mxm_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPIDI_msg_sz_t hdr_sz,
- void *data, MPIDI_msg_sz_t data_sz);
-int MPID_nem_mxm_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data,
- MPIDI_msg_sz_t data_sz, MPID_Request **sreq_ptr);
-int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *header, MPIDI_msg_sz_t hdr_sz);
+int MPID_nem_mxm_iSendContig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr, MPIDI_msg_sz_t hdr_sz,
+ void *data, MPIDI_msg_sz_t data_sz);
+int MPID_nem_mxm_iStartContigMsg(MPIDI_VC_t * vc, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data,
+ MPIDI_msg_sz_t data_sz, MPID_Request ** sreq_ptr);
+int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t * vc, MPID_Request * sreq, void *header,
+ MPIDI_msg_sz_t hdr_sz);
/* direct interface */
-int MPID_nem_mxm_recv(MPIDI_VC_t *vc, MPID_Request *rreq);
-int MPID_nem_mxm_send(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype datatype, int rank, int tag,
- MPID_Comm * comm, int context_offset, MPID_Request **sreq_p);
-int MPID_nem_mxm_ssend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype datatype, int rank, int tag,
- MPID_Comm * comm, int context_offset,MPID_Request **sreq_p);
-int MPID_nem_mxm_isend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype datatype, int rank, int tag,
- MPID_Comm * comm, int context_offset, MPID_Request **sreq_p);
-int MPID_nem_mxm_issend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype datatype, int rank, int tag,
- MPID_Comm * comm, int context_offset,MPID_Request **sreq_p);
-int MPID_nem_mxm_cancel_send(MPIDI_VC_t *vc, MPID_Request *sreq);
-int MPID_nem_mxm_cancel_recv(MPIDI_VC_t *vc, MPID_Request *rreq);
-int MPID_nem_mxm_probe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, int context_offset, MPI_Status *status);
-int MPID_nem_mxm_iprobe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, int context_offset, int *flag, MPI_Status *status);
-int MPID_nem_mxm_improbe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, int context_offset, int *flag,
- MPID_Request **message, MPI_Status *status);
-
-int MPID_nem_mxm_anysource_iprobe(int tag, MPID_Comm *comm, int context_offset, int *flag, MPI_Status *status);
-int MPID_nem_mxm_anysource_improbe(int tag, MPID_Comm *comm, int context_offset, int *flag,
- MPID_Request **message,MPI_Status *status);
+int MPID_nem_mxm_recv(MPIDI_VC_t * vc, MPID_Request * rreq);
+int MPID_nem_mxm_send(MPIDI_VC_t * vc, const void *buf, int count, MPI_Datatype datatype, int rank,
+ int tag, MPID_Comm * comm, int context_offset, MPID_Request ** sreq_p);
+int MPID_nem_mxm_ssend(MPIDI_VC_t * vc, const void *buf, int count, MPI_Datatype datatype, int rank,
+ int tag, MPID_Comm * comm, int context_offset, MPID_Request ** sreq_p);
+int MPID_nem_mxm_isend(MPIDI_VC_t * vc, const void *buf, int count, MPI_Datatype datatype, int rank,
+ int tag, MPID_Comm * comm, int context_offset, MPID_Request ** sreq_p);
+int MPID_nem_mxm_issend(MPIDI_VC_t * vc, const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPID_Comm * comm, int context_offset,
+ MPID_Request ** sreq_p);
+int MPID_nem_mxm_cancel_send(MPIDI_VC_t * vc, MPID_Request * sreq);
+int MPID_nem_mxm_cancel_recv(MPIDI_VC_t * vc, MPID_Request * rreq);
+int MPID_nem_mxm_probe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
+ MPI_Status * status);
+int MPID_nem_mxm_iprobe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
+ int *flag, MPI_Status * status);
+int MPID_nem_mxm_improbe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
+ int *flag, MPID_Request ** message, MPI_Status * status);
+
+int MPID_nem_mxm_anysource_iprobe(int tag, MPID_Comm * comm, int context_offset, int *flag,
+ MPI_Status * status);
+int MPID_nem_mxm_anysource_improbe(int tag, MPID_Comm * comm, int context_offset, int *flag,
+ MPID_Request ** message, MPI_Status * status);
/* active message callback */
#define MXM_MPICH_HID_ADI_MSG 1
void MPID_nem_mxm_get_adi_msg(mxm_conn_h conn, mxm_imm_t imm, void *data,
- size_t length, size_t offset, int last);
+ size_t length, size_t offset, int last);
/* any source management */
-void MPID_nem_mxm_anysource_posted(MPID_Request *req);
-int MPID_nem_mxm_anysource_matched(MPID_Request *req);
+void MPID_nem_mxm_anysource_posted(MPID_Request * req);
+int MPID_nem_mxm_anysource_matched(MPID_Request * req);
/* List type as queue
* Operations, initialization etc
*/
typedef struct list_item list_item_t;
struct list_item {
- list_item_t *next;
+ list_item_t *next;
};
typedef struct list_head list_head_t;
struct list_head {
- list_item_t *head;
- list_item_t **ptail;
- int length;
+ list_item_t *head;
+ list_item_t **ptail;
+ int length;
};
-static inline void list_init(list_head_t *list_head)
+static inline void list_init(list_head_t * list_head)
{
list_head->head = NULL;
list_head->ptail = &list_head->head;
list_head->length = 0;
}
-static inline int list_length(list_head_t *list_head)
+static inline int list_length(list_head_t * list_head)
{
return list_head->length;
}
-static inline int list_is_empty(list_head_t *list_head)
+static inline int list_is_empty(list_head_t * list_head)
{
return list_head->length == 0;
}
-static inline void list_enqueue(list_head_t *list_head, list_item_t *list_item)
+static inline void list_enqueue(list_head_t * list_head, list_item_t * list_item)
{
*list_head->ptail = list_item;
list_head->ptail = &list_item->next;
++list_head->length;
}
-static inline list_item_t *list_dequeue(list_head_t *list_head)
+static inline list_item_t *list_dequeue(list_head_t * list_head)
{
list_item_t *list_item;
@@ -132,15 +137,14 @@ static inline list_item_t *list_dequeue(list_head_t *list_head)
on the network module, facilitating dynamic module loading.
*/
typedef struct {
- mxm_conn_h mxm_conn;
- list_head_t free_queue;
+ mxm_conn_h mxm_conn;
+ list_head_t free_queue;
} MPID_nem_mxm_ep_t;
-typedef struct
-{
- MPIDI_VC_t *ctx;
- MPID_nem_mxm_ep_t *mxm_ep;
- int pending_sends;
+typedef struct {
+ MPIDI_VC_t *ctx;
+ MPID_nem_mxm_ep_t *mxm_ep;
+ int pending_sends;
} MPID_nem_mxm_vc_area;
/* direct macro to private fields in VC */
@@ -159,13 +163,12 @@ typedef struct {
} item;
} MPID_nem_mxm_req_t;
-typedef struct
-{
- MPID_Request *ctx;
+typedef struct {
+ MPID_Request *ctx;
MPID_nem_mxm_req_t *mxm_req;
- mxm_req_buffer_t *iov_buf;
- int iov_count;
- mxm_req_buffer_t tmp_buf[MXM_MPICH_MAX_IOV];
+ mxm_req_buffer_t *iov_buf;
+ int iov_count;
+ mxm_req_buffer_t tmp_buf[MXM_MPICH_MAX_IOV];
} MPID_nem_mxm_req_area;
/* direct macro to private fields in REQ */
@@ -173,42 +176,42 @@ typedef struct
#define REQ_BASE(reqp) ((MPID_nem_mxm_req_area *)((reqp)->ch.netmod_area.padding))
typedef struct MPID_nem_mxm_module_t {
- char *runtime_version;
- char *compiletime_version;
- mxm_context_opts_t *mxm_ctx_opts;
- mxm_ep_opts_t *mxm_ep_opts;
- mxm_h mxm_context;
- mxm_mq_h mxm_mq;
- mxm_ep_h mxm_ep;
- char mxm_ep_addr[MXM_MPICH_MAX_ADDR_SIZE];
- size_t mxm_ep_addr_size;
- int mxm_rank;
- int mxm_np;
- MPID_nem_mxm_ep_t *endpoint;
- list_head_t free_queue;
+ char *runtime_version;
+ char *compiletime_version;
+ mxm_context_opts_t *mxm_ctx_opts;
+ mxm_ep_opts_t *mxm_ep_opts;
+ mxm_h mxm_context;
+ mxm_mq_h mxm_mq;
+ mxm_ep_h mxm_ep;
+ char mxm_ep_addr[MXM_MPICH_MAX_ADDR_SIZE];
+ size_t mxm_ep_addr_size;
+ int mxm_rank;
+ int mxm_np;
+ MPID_nem_mxm_ep_t *endpoint;
+ list_head_t free_queue;
struct {
- int bulk_connect; /* use bulk connect */
- int bulk_disconnect; /* use bulk disconnect */
+ int bulk_connect; /* use bulk connect */
+ int bulk_disconnect; /* use bulk disconnect */
} conf;
} MPID_nem_mxm_module_t;
extern MPID_nem_mxm_module_t *mxm_obj;
-#define container_of(ptr, type, member) (type *)( (char *)(ptr) - offsetof(type,member) )
+#define container_of(ptr, type, member) (type *)((char *)(ptr) - offsetof(type,member))
#define list_dequeue_mxm_req(head) \
container_of(list_dequeue(head), MPID_nem_mxm_req_t, queue)
-static inline void list_grow_mxm_req(list_head_t *list_head)
+static inline void list_grow_mxm_req(list_head_t * list_head)
{
MPID_nem_mxm_req_t *mxm_req = NULL;
int count = MXM_MPICH_MAX_REQ;
while (count--) {
- mxm_req = (MPID_nem_mxm_req_t *)MPIU_Malloc(sizeof(MPID_nem_mxm_req_t));
+ mxm_req = (MPID_nem_mxm_req_t *) MPIU_Malloc(sizeof(MPID_nem_mxm_req_t));
list_enqueue(list_head, &mxm_req->queue);
}
}
-static inline void _mxm_to_mpi_status(mxm_error_t mxm_error, MPI_Status *mpi_status)
+static inline void _mxm_to_mpi_status(mxm_error_t mxm_error, MPI_Status * mpi_status)
{
switch (mxm_error) {
case MXM_OK:
@@ -227,7 +230,7 @@ static inline void _mxm_to_mpi_status(mxm_error_t mxm_error, MPI_Status *mpi_sta
}
}
-static inline int _mxm_req_test(mxm_req_base_t *req)
+static inline int _mxm_req_test(mxm_req_base_t * req)
{
return req->state == MXM_REQ_COMPLETED;
}
@@ -240,7 +243,7 @@ static inline void _mxm_progress_cb(void *user_data)
MPIU_Assert(mpi_errno == MPI_SUCCESS);
}
-static inline void _mxm_req_wait(mxm_req_base_t *req)
+static inline void _mxm_req_wait(mxm_req_base_t * req)
{
mxm_wait_t mxm_wreq;
@@ -284,19 +287,17 @@ static inline mxm_tag_t _mxm_tag_mask(int mpi_tag)
static inline void _dbg_mxm_out(int level,
- FILE* output_id,
- int cr,
- const char* file_name,
- const char* func_name,
- int line_no,
- const char* format, ...)
+ FILE * output_id,
+ int cr,
+ const char *file_name,
+ const char *func_name, int line_no, const char *format, ...)
{
va_list args;
char str[200];
int ret;
if (level < MXM_DEBUG) {
- output_id = ( output_id ? output_id : stderr);
+ output_id = (output_id ? output_id : stderr);
va_start(args, format);
@@ -305,8 +306,11 @@ static inline void _dbg_mxm_out(int level,
if (cr) {
// ret = fprintf(output_id, "[%s #%d] %s %s:%s:%d", MXM_DEBUG_PREFIX, MPIR_Process.comm_world->rank, str, file_name, func_name, line_no);
- ret = fprintf(output_id, "[%s #%d] %s", MXM_DEBUG_PREFIX, MPIR_Process.comm_world->rank, str);
- } else {
+ ret =
+ fprintf(output_id, "[%s #%d] %s", MXM_DEBUG_PREFIX, MPIR_Process.comm_world->rank,
+ str);
+ }
+ else {
ret = fprintf(output_id, "%s", str);
}
assert(-1 != ret);
@@ -317,29 +321,30 @@ static inline void _dbg_mxm_out(int level,
static void _dbg_mxm_hexdump(void *ptr, int buflen)
{
- unsigned char *buf = (unsigned char *)ptr;
+ unsigned char *buf = (unsigned char *) ptr;
char *str = NULL;
int len = 0;
int cur_len = 0;
int i, j;
if (!ptr)
- return ;
+ return;
- len = 80 * ( buflen / 16 + 1);
- str = (char *)MPIU_Malloc(len);
- for (i = 0; i < buflen; i += 16)
- {
+ len = 80 * (buflen / 16 + 1);
+ str = (char *) MPIU_Malloc(len);
+ for (i = 0; i < buflen; i += 16) {
cur_len += MPIU_Snprintf(str + cur_len, len - cur_len, "%06x: ", i);
for (j = 0; j < 16; j++)
- if (i + j < buflen)
- cur_len += MPIU_Snprintf(str + cur_len, len - cur_len, "%02x ", buf[i + j]);
- else
- cur_len += MPIU_Snprintf(str + cur_len, len - cur_len, " ");
+ if (i + j < buflen)
+ cur_len += MPIU_Snprintf(str + cur_len, len - cur_len, "%02x ", buf[i + j]);
+ else
+ cur_len += MPIU_Snprintf(str + cur_len, len - cur_len, " ");
cur_len += MPIU_Snprintf(str + cur_len, len - cur_len, " ");
for (j = 0; j < 16; j++)
if (i + j < buflen)
- cur_len += MPIU_Snprintf(str + cur_len, len - cur_len, "%c", isprint(buf[i + j]) ? buf[i + j] : '.');
+ cur_len +=
+ MPIU_Snprintf(str + cur_len, len - cur_len, "%c",
+ isprint(buf[i + j]) ? buf[i + j] : '.');
cur_len += MPIU_Snprintf(str + cur_len, len - cur_len, "\n");
}
_dbg_mxm_out(8, NULL, 1, NULL, NULL, -1, "%s", str);
@@ -368,7 +373,7 @@ static inline char *_rank_val_to_str(int rank, char *out, int max)
return out;
}
-static inline void _dbg_mxm_req(MPID_Request *req)
+static inline void _dbg_mxm_req(MPID_Request * req)
{
FILE *stream = stderr;
char tag_buf[128];
@@ -376,12 +381,12 @@ static inline void _dbg_mxm_req(MPID_Request *req)
if (req) {
_dbg_mxm_out(10, NULL, 1, NULL, NULL, -1,
- "[ctx=%#x rank=%d] req=%p ctx=%#x rank=%s tag=%s kind=%d\n",
- MPIR_Process.comm_world->context_id, MPIR_Process.comm_world->rank,
- req, req->dev.match.parts.context_id,
- _rank_val_to_str(req->dev.match.parts.rank, rank_buf, sizeof(rank_buf)),
- _tag_val_to_str(req->dev.match.parts.tag, tag_buf, sizeof(tag_buf)),
- req->kind);
+ "[ctx=%#x rank=%d] req=%p ctx=%#x rank=%s tag=%s kind=%d\n",
+ MPIR_Process.comm_world->context_id, MPIR_Process.comm_world->rank,
+ req, req->dev.match.parts.context_id,
+ _rank_val_to_str(req->dev.match.parts.rank, rank_buf, sizeof(rank_buf)),
+ _tag_val_to_str(req->dev.match.parts.tag, tag_buf, sizeof(tag_buf)),
+ req->kind);
}
}
@@ -397,4 +402,3 @@ static inline void _dbg_mxm_req(MPID_Request *req)
#endif
#endif
-
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c
index 58c4489..bc6d6d4 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c
@@ -33,27 +33,27 @@ MPID_nem_netmod_funcs_t MPIDI_nem_mxm_funcs = {
};
static MPIDI_Comm_ops_t comm_ops = {
- MPID_nem_mxm_recv, /* recv_posted */
+ MPID_nem_mxm_recv, /* recv_posted */
- MPID_nem_mxm_send, /* send */
- MPID_nem_mxm_send, /* rsend */
+ MPID_nem_mxm_send, /* send */
+ MPID_nem_mxm_send, /* rsend */
MPID_nem_mxm_ssend, /* ssend */
MPID_nem_mxm_isend, /* isend */
MPID_nem_mxm_isend, /* irsend */
- MPID_nem_mxm_issend, /* issend */
+ MPID_nem_mxm_issend, /* issend */
- NULL, /* send_init */
- NULL, /* bsend_init */
- NULL, /* rsend_init */
- NULL, /* ssend_init */
- NULL, /* startall */
+ NULL, /* send_init */
+ NULL, /* bsend_init */
+ NULL, /* rsend_init */
+ NULL, /* ssend_init */
+ NULL, /* startall */
- MPID_nem_mxm_cancel_send,/* cancel_send */
- MPID_nem_mxm_cancel_recv, /* cancel_recv */
+ MPID_nem_mxm_cancel_send, /* cancel_send */
+ MPID_nem_mxm_cancel_recv, /* cancel_recv */
MPID_nem_mxm_probe, /* probe */
- MPID_nem_mxm_iprobe, /* iprobe */
- MPID_nem_mxm_improbe /* improbe */
+ MPID_nem_mxm_iprobe, /* iprobe */
+ MPID_nem_mxm_improbe /* improbe */
};
@@ -62,20 +62,20 @@ MPID_nem_mxm_module_t *mxm_obj;
static int _mxm_init(int rank, int size);
static int _mxm_fini(void);
-static int _mxm_connect(MPID_nem_mxm_ep_t *ep, const char *business_card, MPID_nem_mxm_vc_area *vc_area);
-static int _mxm_disconnect(MPID_nem_mxm_ep_t *ep);
-static int _mxm_add_comm(MPID_Comm *comm, void *param);
-static int _mxm_del_comm(MPID_Comm *comm, void *param);
+static int _mxm_connect(MPID_nem_mxm_ep_t * ep, const char *business_card,
+ MPID_nem_mxm_vc_area * vc_area);
+static int _mxm_disconnect(MPID_nem_mxm_ep_t * ep);
+static int _mxm_add_comm(MPID_Comm * comm, void *param);
+static int _mxm_del_comm(MPID_Comm * comm, void *param);
#undef FUNCNAME
#define FUNCNAME MPID_nem_mxm_post_init
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int
-MPID_nem_mxm_post_init(void)
+int MPID_nem_mxm_post_init(void)
{
- int mpi_errno = MPI_SUCCESS ;
+ int mpi_errno = MPI_SUCCESS;
#if MXM_API >= MXM_VERSION(3,1)
if (_mxm_obj.conf.bulk_connect) {
@@ -83,9 +83,9 @@ MPID_nem_mxm_post_init(void)
}
#endif
-fn_exit:
+ fn_exit:
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
@@ -94,46 +94,48 @@ fn_fail:
#define FUNCNAME MPID_nem_mxm_init
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_init(MPIDI_PG_t *pg_p, int pg_rank, char **bc_val_p, int *val_max_sz_p)
+int MPID_nem_mxm_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_max_sz_p)
{
- int mpi_errno = MPI_SUCCESS;
+ int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MXM_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_INIT);
+ MPIDI_STATE_DECL(MPID_STATE_MXM_INIT);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_INIT);
- /* first make sure that our private fields in the vc and req fit into the area provided */
- MPIU_Assert(sizeof(MPID_nem_mxm_vc_area) <= MPID_NEM_VC_NETMOD_AREA_LEN);
- MPIU_Assert(sizeof(MPID_nem_mxm_req_area) <= MPID_NEM_REQ_NETMOD_AREA_LEN);
+ /* first make sure that our private fields in the vc and req fit into the area provided */
+ MPIU_Assert(sizeof(MPID_nem_mxm_vc_area) <= MPID_NEM_VC_NETMOD_AREA_LEN);
+ MPIU_Assert(sizeof(MPID_nem_mxm_req_area) <= MPID_NEM_REQ_NETMOD_AREA_LEN);
- mpi_errno = _mxm_init(pg_rank, pg_p->size);
- if (mpi_errno)
- MPIU_ERR_POP(mpi_errno);
+ mpi_errno = _mxm_init(pg_rank, pg_p->size);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
- mpi_errno = MPID_nem_mxm_get_business_card(pg_rank, bc_val_p, val_max_sz_p);
- if (mpi_errno)
- MPIU_ERR_POP(mpi_errno);
+ mpi_errno = MPID_nem_mxm_get_business_card(pg_rank, bc_val_p, val_max_sz_p);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
- mpi_errno = MPIDI_CH3I_Register_anysource_notification(MPID_nem_mxm_anysource_posted, MPID_nem_mxm_anysource_matched);
- if (mpi_errno)
- MPIU_ERR_POP(mpi_errno);
+ mpi_errno =
+ MPIDI_CH3I_Register_anysource_notification(MPID_nem_mxm_anysource_posted,
+ MPID_nem_mxm_anysource_matched);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
- mpi_errno = MPID_nem_register_initcomp_cb(MPID_nem_mxm_post_init);
- if (mpi_errno)
- MPIU_ERR_POP(mpi_errno);
+ mpi_errno = MPID_nem_register_initcomp_cb(MPID_nem_mxm_post_init);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
- mpi_errno = MPIDI_CH3U_Comm_register_create_hook(_mxm_add_comm, NULL);
- if (mpi_errno)
- MPIU_ERR_POP(mpi_errno);
+ mpi_errno = MPIDI_CH3U_Comm_register_create_hook(_mxm_add_comm, NULL);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
- mpi_errno = MPIDI_CH3U_Comm_register_destroy_hook(_mxm_del_comm, NULL);
- if (mpi_errno)
- MPIU_ERR_POP(mpi_errno);
+ mpi_errno = MPIDI_CH3U_Comm_register_destroy_hook(_mxm_del_comm, NULL);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
-fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_INIT);
- return mpi_errno;
-fn_fail:
- goto fn_exit;
+ fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_INIT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
}
#undef FUNCNAME
@@ -142,20 +144,20 @@ fn_fail:
#define FCNAME MPIDI_QUOTE(FUNCNAME)
int MPID_nem_mxm_finalize(void)
{
- int mpi_errno = MPI_SUCCESS;
+ int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MXM_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_FINALIZE);
+ MPIDI_STATE_DECL(MPID_STATE_MXM_FINALIZE);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_FINALIZE);
- mpi_errno = _mxm_fini();
- if (mpi_errno)
- MPIU_ERR_POP(mpi_errno);
+ mpi_errno = _mxm_fini();
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
-fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_FINALIZE);
- return mpi_errno;
-fn_fail:
- goto fn_exit;
+ fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_FINALIZE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
}
#undef FUNCNAME
@@ -164,161 +166,160 @@ fn_fail:
#define FCNAME MPIDI_QUOTE(FUNCNAME)
int MPID_nem_mxm_get_business_card(int my_rank, char **bc_val_p, int *val_max_sz_p)
{
- int mpi_errno = MPI_SUCCESS;
- int str_errno = MPIU_STR_SUCCESS;
-
- MPIDI_STATE_DECL(MPID_STATE_MXM_GET_BUSINESS_CARD);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_GET_BUSINESS_CARD);
-
- str_errno = MPIU_Str_add_binary_arg(bc_val_p, val_max_sz_p, MXM_MPICH_ENDPOINT_KEY,
- _mxm_obj.mxm_ep_addr, _mxm_obj.mxm_ep_addr_size);
- if (str_errno) {
- MPIU_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
- MPIU_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
- }
-
-fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_GET_BUSINESS_CARD);
- return mpi_errno;
-fn_fail:
- goto fn_exit;
+ int mpi_errno = MPI_SUCCESS;
+ int str_errno = MPIU_STR_SUCCESS;
+
+ MPIDI_STATE_DECL(MPID_STATE_MXM_GET_BUSINESS_CARD);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_GET_BUSINESS_CARD);
+
+ str_errno = MPIU_Str_add_binary_arg(bc_val_p, val_max_sz_p, MXM_MPICH_ENDPOINT_KEY,
+ _mxm_obj.mxm_ep_addr, _mxm_obj.mxm_ep_addr_size);
+ if (str_errno) {
+ MPIU_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIU_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
+ }
+
+ fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_GET_BUSINESS_CARD);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
}
#undef FUNCNAME
#define FUNCNAME MPID_nem_mxm_connect_to_root
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_connect_to_root(const char *business_card, MPIDI_VC_t *new_vc)
+int MPID_nem_mxm_connect_to_root(const char *business_card, MPIDI_VC_t * new_vc)
{
- int mpi_errno = MPI_SUCCESS;
+ int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MXM_CONNECT_TO_ROOT);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_CONNECT_TO_ROOT);
+ MPIDI_STATE_DECL(MPID_STATE_MXM_CONNECT_TO_ROOT);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_CONNECT_TO_ROOT);
- MPIU_ERR_SETFATAL(mpi_errno, MPI_ERR_OTHER, "**notimpl");
+ MPIU_ERR_SETFATAL(mpi_errno, MPI_ERR_OTHER, "**notimpl");
-fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_CONNECT_TO_ROOT);
- return mpi_errno;
-fn_fail:
- goto fn_exit;
+ fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_CONNECT_TO_ROOT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
}
#undef FUNCNAME
#define FUNCNAME MPID_nem_mxm_vc_init
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_vc_init(MPIDI_VC_t *vc)
+int MPID_nem_mxm_vc_init(MPIDI_VC_t * vc)
{
- int mpi_errno = MPI_SUCCESS;
- MPIDI_CH3I_VC *vc_ch = &vc->ch;
-
- MPIDI_STATE_DECL(MPID_STATE_MXM_VC_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_VC_INIT);
-
- /* local connection is used for any source communication */
- MPIU_Assert(MPID_nem_mem_region.rank != vc->lpid);
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE,
- (MPIU_DBG_FDEST,
- "[%i]=== connecting to %i \n",
- MPID_nem_mem_region.rank, vc->lpid));
- {
- char *business_card;
- int val_max_sz;
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH3I_VC *vc_ch = &vc->ch;
+
+ MPIDI_STATE_DECL(MPID_STATE_MXM_VC_INIT);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_VC_INIT);
+
+ /* local connection is used for any source communication */
+ MPIU_Assert(MPID_nem_mem_region.rank != vc->lpid);
+ MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE,
+ (MPIU_DBG_FDEST,
+ "[%i]=== connecting to %i \n", MPID_nem_mem_region.rank, vc->lpid));
+ {
+ char *business_card;
+ int val_max_sz;
#ifdef USE_PMI2_API
- val_max_sz = PMI2_MAX_VALLEN;
+ val_max_sz = PMI2_MAX_VALLEN;
#else
- mpi_errno = PMI_KVS_Get_value_length_max(&val_max_sz);
- if (mpi_errno)
- MPIU_ERR_POP(mpi_errno);
+ mpi_errno = PMI_KVS_Get_value_length_max(&val_max_sz);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
#endif
- business_card = (char *)MPIU_Malloc(val_max_sz);
- mpi_errno = vc->pg->getConnInfo(vc->pg_rank, business_card, val_max_sz, vc->pg);
- if (mpi_errno)
- MPIU_ERR_POP(mpi_errno);
+ business_card = (char *) MPIU_Malloc(val_max_sz);
+ mpi_errno = vc->pg->getConnInfo(vc->pg_rank, business_card, val_max_sz, vc->pg);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
- VC_FIELD(vc, ctx) = vc;
- VC_FIELD(vc, mxm_ep) = &_mxm_obj.endpoint[vc->pg_rank];
- mpi_errno = _mxm_connect(&_mxm_obj.endpoint[vc->pg_rank], business_card, VC_BASE(vc));
- if (mpi_errno)
- MPIU_ERR_POP(mpi_errno);
+ VC_FIELD(vc, ctx) = vc;
+ VC_FIELD(vc, mxm_ep) = &_mxm_obj.endpoint[vc->pg_rank];
+ mpi_errno = _mxm_connect(&_mxm_obj.endpoint[vc->pg_rank], business_card, VC_BASE(vc));
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
- MPIU_Free(business_card);
- }
+ MPIU_Free(business_card);
+ }
- MPIDI_CHANGE_VC_STATE(vc, ACTIVE);
+ MPIDI_CHANGE_VC_STATE(vc, ACTIVE);
- VC_FIELD(vc, pending_sends) = 0;
+ VC_FIELD(vc, pending_sends) = 0;
- vc->rndvSend_fn = NULL;
- vc->rndvRecv_fn = NULL;
- vc->sendNoncontig_fn = MPID_nem_mxm_SendNoncontig;
- vc->comm_ops = &comm_ops;
+ vc->rndvSend_fn = NULL;
+ vc->rndvRecv_fn = NULL;
+ vc->sendNoncontig_fn = MPID_nem_mxm_SendNoncontig;
+ vc->comm_ops = &comm_ops;
- vc_ch->iStartContigMsg = MPID_nem_mxm_iStartContigMsg;
- vc_ch->iSendContig = MPID_nem_mxm_iSendContig;
+ vc_ch->iStartContigMsg = MPID_nem_mxm_iStartContigMsg;
+ vc_ch->iSendContig = MPID_nem_mxm_iSendContig;
-fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_VC_INIT);
- return mpi_errno;
-fn_fail:
- goto fn_exit;
+ fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_VC_INIT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
}
#undef FUNCNAME
#define FUNCNAME MPID_nem_mxm_vc_destroy
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_vc_destroy(MPIDI_VC_t *vc)
+int MPID_nem_mxm_vc_destroy(MPIDI_VC_t * vc)
{
- int mpi_errno = MPI_SUCCESS;
+ int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MXM_VC_DESTROY);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_VC_DESTROY);
+ MPIDI_STATE_DECL(MPID_STATE_MXM_VC_DESTROY);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_VC_DESTROY);
- /* Do nothing because
- * finalize is called before vc destroy as result it is not possible
- * to destroy endpoint here
- */
+ /* Do nothing because
+ * finalize is called before vc destroy as result it is not possible
+ * to destroy endpoint here
+ */
#if 0
- if (VC_FIELD(vc, ctx) == vc) {
- mpi_errno = _mxm_disconnect(VC_FIELD(vc, mxm_ep));
- if (mpi_errno)
- MPIU_ERR_POP(mpi_errno);
- }
+ if (VC_FIELD(vc, ctx) == vc) {
+ mpi_errno = _mxm_disconnect(VC_FIELD(vc, mxm_ep));
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+ }
#endif
-fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_VC_DESTROY);
- return mpi_errno;
-fn_fail:
- goto fn_exit;
+ fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_VC_DESTROY);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
}
#undef FUNCNAME
#define FUNCNAME MPID_nem_mxm_vc_terminate
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_vc_terminate(MPIDI_VC_t *vc)
+int MPID_nem_mxm_vc_terminate(MPIDI_VC_t * vc)
{
- int mpi_errno = MPI_SUCCESS;
+ int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MXM_VC_TERMINATE);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_VC_TERMINATE);
+ MPIDI_STATE_DECL(MPID_STATE_MXM_VC_TERMINATE);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_VC_TERMINATE);
- while((VC_FIELD(vc, pending_sends)) > 0)
- MPID_nem_mxm_poll(FALSE);
+ while ((VC_FIELD(vc, pending_sends)) > 0)
+ MPID_nem_mxm_poll(FALSE);
- mpi_errno = MPIDI_CH3U_Handle_connection(vc, MPIDI_VC_EVENT_TERMINATED);
- if (mpi_errno)
- MPIU_ERR_POP(mpi_errno);
+ mpi_errno = MPIDI_CH3U_Handle_connection(vc, MPIDI_VC_EVENT_TERMINATED);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
-fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_VC_TERMINATE);
- return mpi_errno;
-fn_fail:
- goto fn_exit;
+ fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_VC_TERMINATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
}
static int _mxm_init(int rank, int size)
@@ -331,11 +332,10 @@ static int _mxm_init(int rank, int size)
if (cur_ver != MXM_API) {
MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE,
(MPIU_DBG_FDEST,
- "WARNING: MPICH was compiled with MXM version %d.%d but version %ld.%ld detected.",
- MXM_VERNO_MAJOR,
- MXM_VERNO_MINOR,
- (cur_ver >> MXM_MAJOR_BIT) & 0xff,
- (cur_ver >> MXM_MINOR_BIT) & 0xff));
+ "WARNING: MPICH was compiled with MXM version %d.%d but version %ld.%ld detected.",
+ MXM_VERNO_MAJOR,
+ MXM_VERNO_MINOR,
+ (cur_ver >> MXM_MAJOR_BIT) & 0xff, (cur_ver >> MXM_MINOR_BIT) & 0xff));
}
_mxm_obj.compiletime_version = MXM_VERNO_STRING;
@@ -344,15 +344,15 @@ static int _mxm_init(int rank, int size)
#else
_mxm_obj.runtime_version = MPIU_Malloc(sizeof(MXM_VERNO_STRING) + 10);
snprintf(_mxm_obj.runtime_version, (sizeof(MXM_VERNO_STRING) + 9),
- "%ld.%ld",
- (cur_ver >> MXM_MAJOR_BIT) & 0xff, (cur_ver >> MXM_MINOR_BIT) & 0xff);
+ "%ld.%ld", (cur_ver >> MXM_MAJOR_BIT) & 0xff, (cur_ver >> MXM_MINOR_BIT) & 0xff);
#endif
- if (cur_ver < MXM_VERSION(3,2)) {
- _mxm_obj.conf.bulk_connect = 0;
+ if (cur_ver < MXM_VERSION(3, 2)) {
+ _mxm_obj.conf.bulk_connect = 0;
_mxm_obj.conf.bulk_disconnect = 0;
- } else {
- _mxm_obj.conf.bulk_connect = 1;
+ }
+ else {
+ _mxm_obj.conf.bulk_connect = 1;
_mxm_obj.conf.bulk_disconnect = 1;
}
@@ -365,37 +365,34 @@ static int _mxm_init(int rank, int size)
ret = mxm_init(_mxm_obj.mxm_ctx_opts, &_mxm_obj.mxm_context);
MPIU_ERR_CHKANDJUMP1(ret != MXM_OK,
mpi_errno, MPI_ERR_OTHER,
- "**mxm_init",
- "**mxm_init %s", mxm_error_string(ret));
+ "**mxm_init", "**mxm_init %s", mxm_error_string(ret));
- ret = mxm_set_am_handler(_mxm_obj.mxm_context, MXM_MPICH_HID_ADI_MSG, MPID_nem_mxm_get_adi_msg, MXM_AM_FLAG_THREAD_SAFE);
- MPIU_ERR_CHKANDJUMP1(ret != MXM_OK,
- mpi_errno, MPI_ERR_OTHER,
- "**mxm_set_am_handler",
+ ret =
+ mxm_set_am_handler(_mxm_obj.mxm_context, MXM_MPICH_HID_ADI_MSG, MPID_nem_mxm_get_adi_msg,
+ MXM_AM_FLAG_THREAD_SAFE);
+ MPIU_ERR_CHKANDJUMP1(ret != MXM_OK, mpi_errno, MPI_ERR_OTHER, "**mxm_set_am_handler",
"**mxm_set_am_handler %s", mxm_error_string(ret));
ret = mxm_mq_create(_mxm_obj.mxm_context, MXM_MPICH_MQ_ID, &_mxm_obj.mxm_mq);
MPIU_ERR_CHKANDJUMP1(ret != MXM_OK,
mpi_errno, MPI_ERR_OTHER,
- "**mxm_mq_create",
- "**mxm_mq_create %s", mxm_error_string(ret));
+ "**mxm_mq_create", "**mxm_mq_create %s", mxm_error_string(ret));
ret = mxm_ep_create(_mxm_obj.mxm_context, _mxm_obj.mxm_ep_opts, &_mxm_obj.mxm_ep);
MPIU_ERR_CHKANDJUMP1(ret != MXM_OK,
mpi_errno, MPI_ERR_OTHER,
- "**mxm_ep_create",
- "**mxm_ep_create %s", mxm_error_string(ret));
+ "**mxm_ep_create", "**mxm_ep_create %s", mxm_error_string(ret));
_mxm_obj.mxm_ep_addr_size = MXM_MPICH_MAX_ADDR_SIZE;
ret = mxm_ep_get_address(_mxm_obj.mxm_ep, &_mxm_obj.mxm_ep_addr, &_mxm_obj.mxm_ep_addr_size);
MPIU_ERR_CHKANDJUMP1(ret != MXM_OK,
mpi_errno, MPI_ERR_OTHER,
- "**mxm_ep_get_address",
- "**mxm_ep_get_address %s", mxm_error_string(ret));
+ "**mxm_ep_get_address", "**mxm_ep_get_address %s", mxm_error_string(ret));
_mxm_obj.mxm_rank = rank;
_mxm_obj.mxm_np = size;
- _mxm_obj.endpoint = (MPID_nem_mxm_ep_t *)MPIU_Malloc(_mxm_obj.mxm_np * sizeof(MPID_nem_mxm_ep_t));
+ _mxm_obj.endpoint =
+ (MPID_nem_mxm_ep_t *) MPIU_Malloc(_mxm_obj.mxm_np * sizeof(MPID_nem_mxm_ep_t));
memset(_mxm_obj.endpoint, 0, _mxm_obj.mxm_np * sizeof(MPID_nem_mxm_ep_t));
list_init(&_mxm_obj.free_queue);
@@ -404,9 +401,9 @@ static int _mxm_init(int rank, int size)
mxm_obj = &_mxm_obj;
-fn_exit:
+ fn_exit:
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
@@ -448,13 +445,14 @@ static int _mxm_fini(void)
MPIU_Free(_mxm_obj.runtime_version);
}
-fn_exit:
+ fn_exit:
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
-static int _mxm_connect(MPID_nem_mxm_ep_t *ep, const char *business_card, MPID_nem_mxm_vc_area *vc_area)
+static int _mxm_connect(MPID_nem_mxm_ep_t * ep, const char *business_card,
+ MPID_nem_mxm_vc_area * vc_area)
{
int mpi_errno = MPI_SUCCESS;
int str_errno = MPIU_STR_SUCCESS;
@@ -462,14 +460,15 @@ static int _mxm_connect(MPID_nem_mxm_ep_t *ep, const char *business_card, MPID_n
char mxm_ep_addr[MXM_MPICH_MAX_ADDR_SIZE];
int len = 0;
- str_errno = MPIU_Str_get_binary_arg(business_card, MXM_MPICH_ENDPOINT_KEY, mxm_ep_addr, sizeof(mxm_ep_addr), &len);
+ str_errno =
+ MPIU_Str_get_binary_arg(business_card, MXM_MPICH_ENDPOINT_KEY, mxm_ep_addr,
+ sizeof(mxm_ep_addr), &len);
MPIU_ERR_CHKANDJUMP(str_errno, mpi_errno, MPI_ERR_OTHER, "**buscard");
ret = mxm_ep_connect(_mxm_obj.mxm_ep, mxm_ep_addr, &ep->mxm_conn);
MPIU_ERR_CHKANDJUMP1(ret != MXM_OK,
mpi_errno, MPI_ERR_OTHER,
- "**mxm_ep_connect",
- "**mxm_ep_connect %s", mxm_error_string(ret));
+ "**mxm_ep_connect", "**mxm_ep_connect %s", mxm_error_string(ret));
mxm_conn_ctx_set(ep->mxm_conn, vc_area->ctx);
@@ -477,13 +476,13 @@ static int _mxm_connect(MPID_nem_mxm_ep_t *ep, const char *business_card, MPID_n
list_grow_mxm_req(&ep->free_queue);
MPIU_Assert(list_length(&ep->free_queue) == MXM_MPICH_MAX_REQ);
-fn_exit:
+ fn_exit:
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
-static int _mxm_disconnect(MPID_nem_mxm_ep_t *ep)
+static int _mxm_disconnect(MPID_nem_mxm_ep_t * ep)
{
int mpi_errno = MPI_SUCCESS;
mxm_error_t ret = MXM_OK;
@@ -502,13 +501,13 @@ static int _mxm_disconnect(MPID_nem_mxm_ep_t *ep)
}
}
-fn_exit:
+ fn_exit:
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
-static int _mxm_add_comm(MPID_Comm *comm, void *param)
+static int _mxm_add_comm(MPID_Comm * comm, void *param)
{
int mpi_errno = MPI_SUCCESS;
mxm_error_t ret = MXM_OK;
@@ -520,21 +519,20 @@ static int _mxm_add_comm(MPID_Comm *comm, void *param)
ret = mxm_mq_create(_mxm_obj.mxm_context, comm->context_id, &mxm_mq);
MPIU_ERR_CHKANDJUMP1(ret != MXM_OK,
mpi_errno, MPI_ERR_OTHER,
- "**mxm_mq_create",
- "**mxm_mq_create %s", mxm_error_string(ret));
+ "**mxm_mq_create", "**mxm_mq_create %s", mxm_error_string(ret));
- comm->ch.netmod_comm = (void *)mxm_mq;
+ comm->ch.netmod_comm = (void *) mxm_mq;
-fn_exit:
+ fn_exit:
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
-static int _mxm_del_comm(MPID_Comm *comm, void *param)
+static int _mxm_del_comm(MPID_Comm * comm, void *param)
{
int mpi_errno = MPI_SUCCESS;
- mxm_mq_h mxm_mq = (mxm_mq_h)comm->ch.netmod_comm;
+ mxm_mq_h mxm_mq = (mxm_mq_h) comm->ch.netmod_comm;
_dbg_mxm_output(6, "Del COMM comm %p (context %d rank %d) \n",
comm, comm->context_id, comm->rank);
@@ -544,8 +542,8 @@ static int _mxm_del_comm(MPID_Comm *comm, void *param)
comm->ch.netmod_comm = NULL;
-fn_exit:
+ fn_exit:
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_poll.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_poll.c
index 6ce5f8e..50487fa 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_poll.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_poll.c
@@ -9,12 +9,13 @@
#include "mxm_impl.h"
static int _mxm_poll(void);
-static int _mxm_handle_rreq(MPID_Request *req);
+static int _mxm_handle_rreq(MPID_Request * req);
static void _mxm_recv_completion_cb(void *context);
-static int _mxm_irecv(MPID_nem_mxm_ep_t *ep, MPID_nem_mxm_req_area *req, int id, mxm_mq_h mxm_mq, mxm_tag_t mxm_tag);
-static int _mxm_process_rdtype(MPID_Request **rreq_p, MPI_Datatype datatype, MPID_Datatype *dt_ptr, MPIDI_msg_sz_t data_sz,
- const void *buf, int count,
- mxm_req_buffer_t **iov_buf, int *iov_count);
+static int _mxm_irecv(MPID_nem_mxm_ep_t * ep, MPID_nem_mxm_req_area * req, int id, mxm_mq_h mxm_mq,
+ mxm_tag_t mxm_tag);
+static int _mxm_process_rdtype(MPID_Request ** rreq_p, MPI_Datatype datatype,
+ MPID_Datatype * dt_ptr, MPIDI_msg_sz_t data_sz, const void *buf,
+ int count, mxm_req_buffer_t ** iov_buf, int *iov_count);
#undef FUNCNAME
#define FUNCNAME MPID_nem_mxm_poll
@@ -31,10 +32,10 @@ int MPID_nem_mxm_poll(int in_blocking_progress)
if (mpi_errno)
MPIU_ERR_POP(mpi_errno);
-fn_exit:
+ fn_exit:
MPIDI_FUNC_EXIT(MPID_STATE_MXM_POLL);
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
@@ -45,14 +46,14 @@ static int _mxm_poll(void)
mxm_error_t ret = MXM_OK;
ret = mxm_progress(mxm_obj->mxm_context);
- if ((MXM_OK != ret) && (MXM_ERR_NO_PROGRESS != ret) ) {
+ if ((MXM_OK != ret) && (MXM_ERR_NO_PROGRESS != ret)) {
mpi_errno = MPI_ERR_OTHER;
goto fn_fail;
- }
+ }
-fn_exit:
+ fn_exit:
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
@@ -62,7 +63,7 @@ fn_fail:
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
void MPID_nem_mxm_get_adi_msg(mxm_conn_h conn, mxm_imm_t imm, void *data,
- size_t length, size_t offset, int last)
+ size_t length, size_t offset, int last)
{
MPIDI_VC_t *vc = NULL;
@@ -72,7 +73,7 @@ void MPID_nem_mxm_get_adi_msg(mxm_conn_h conn, mxm_imm_t imm, void *data,
vc = mxm_conn_ctx_get(conn);
- MPID_nem_handle_pkt(vc, data, (MPIDI_msg_sz_t)(length));
+ MPID_nem_handle_pkt(vc, data, (MPIDI_msg_sz_t) (length));
}
@@ -80,7 +81,7 @@ void MPID_nem_mxm_get_adi_msg(mxm_conn_h conn, mxm_imm_t imm, void *data,
#define FUNCNAME MPID_nem_mxm_anysource_posted
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-void MPID_nem_mxm_anysource_posted(MPID_Request *req)
+void MPID_nem_mxm_anysource_posted(MPID_Request * req)
{
int mpi_errno = MPI_SUCCESS;
@@ -102,20 +103,20 @@ void MPID_nem_mxm_anysource_posted(MPID_Request *req)
#define FUNCNAME MPID_nem_mxm_anysource_matched
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_anysource_matched(MPID_Request *req)
+int MPID_nem_mxm_anysource_matched(MPID_Request * req)
{
int mpi_errno = MPI_SUCCESS;
mxm_error_t ret = MXM_OK;
- int matched = FALSE;
+ int matched = FALSE;
/* This function is called when an anysource request in the posted
- receive queue is matched and dequeued see MPIDI_POSTED_RECV_DEQUEUE_HOOK().
- It returns 0(FALSE) if the req was not matched by mxm and non-zero(TRUE)
- otherwise.
- This happens
- when the channel supports shared-memory and network communication
- with a network capable of matching, and the same request is matched
- by the network and, e.g., shared-memory.
+ * receive queue is matched and dequeued see MPIDI_POSTED_RECV_DEQUEUE_HOOK().
+ * It returns 0(FALSE) if the req was not matched by mxm and non-zero(TRUE)
+ * otherwise.
+ * This happens
+ * when the channel supports shared-memory and network communication
+ * with a network capable of matching, and the same request is matched
+ * by the network and, e.g., shared-memory.
*/
MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_MATCHED);
MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_MATCHED);
@@ -125,7 +126,8 @@ int MPID_nem_mxm_anysource_matched(MPID_Request *req)
ret = mxm_req_cancel_recv(&REQ_FIELD(req, mxm_req->item.recv));
if ((MXM_OK == ret) || (MXM_ERR_NO_PROGRESS == ret)) {
MPID_Segment_free(req->dev.segment_ptr);
- } else {
+ }
+ else {
_mxm_req_wait(&REQ_FIELD(req, mxm_req->item.base));
matched = TRUE;
}
@@ -141,7 +143,7 @@ int MPID_nem_mxm_anysource_matched(MPID_Request *req)
#define FUNCNAME MPID_nem_mxm_recv
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_recv(MPIDI_VC_t *vc, MPID_Request *rreq)
+int MPID_nem_mxm_recv(MPIDI_VC_t * vc, MPID_Request * rreq)
{
int mpi_errno = MPI_SUCCESS;
mxm_error_t ret = MXM_OK;
@@ -151,38 +153,42 @@ int MPID_nem_mxm_recv(MPIDI_VC_t *vc, MPID_Request *rreq)
MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_RECV);
MPIU_Assert(rreq);
- MPIU_Assert(((rreq->dev.match.parts.rank == MPI_ANY_SOURCE) && (vc == NULL)) || (vc && !vc->ch.is_local));
+ MPIU_Assert(((rreq->dev.match.parts.rank == MPI_ANY_SOURCE) && (vc == NULL)) ||
+ (vc && !vc->ch.is_local));
{
- MPIR_Rank_t source = rreq->dev.match.parts.rank;
+ MPIR_Rank_t source = rreq->dev.match.parts.rank;
MPIR_Context_id_t context_id = rreq->dev.match.parts.context_id;
- int tag = rreq->dev.match.parts.tag;
- int ret;
- MPIDI_msg_sz_t data_sz;
- int dt_contig;
- MPI_Aint dt_true_lb;
- MPID_Datatype *dt_ptr;
+ int tag = rreq->dev.match.parts.tag;
+ int ret;
+ MPIDI_msg_sz_t data_sz;
+ int dt_contig;
+ MPI_Aint dt_true_lb;
+ MPID_Datatype *dt_ptr;
MPIU_Assert((rreq->kind == MPID_REQUEST_RECV) || (rreq->kind == MPID_PREQUEST_RECV));
- MPIDI_Datatype_get_info(rreq->dev.user_count, rreq->dev.datatype, dt_contig, data_sz, dt_ptr,dt_true_lb);
+ MPIDI_Datatype_get_info(rreq->dev.user_count, rreq->dev.datatype, dt_contig, data_sz,
+ dt_ptr, dt_true_lb);
rreq->dev.OnDataAvail = NULL;
rreq->dev.tmpbuf = NULL;
rreq->ch.vc = vc;
- _dbg_mxm_output(5, "Recv ========> Getting USER msg for req %p (context %d rank %d tag %d size %d) \n",
- rreq, context_id, source, tag, data_sz);
+ _dbg_mxm_output(5,
+ "Recv ========> Getting USER msg for req %p (context %d rank %d tag %d size %d) \n",
+ rreq, context_id, source, tag, data_sz);
REQ_FIELD(rreq, ctx) = rreq;
REQ_FIELD(rreq, iov_buf) = REQ_FIELD(rreq, tmp_buf);
REQ_FIELD(rreq, iov_count) = 0;
REQ_FIELD(rreq, iov_buf)[0].ptr = NULL;
- REQ_FIELD(rreq, iov_buf)[0].length = 0;
+ REQ_FIELD(rreq, iov_buf)[0].length = 0;
if (dt_contig) {
REQ_FIELD(rreq, iov_count) = 1;
- REQ_FIELD(rreq, iov_buf)[0].ptr = (char *)(rreq->dev.user_buf) + dt_true_lb;
- REQ_FIELD(rreq, iov_buf)[0].length = data_sz;
- } else {
+ REQ_FIELD(rreq, iov_buf)[0].ptr = (char *) (rreq->dev.user_buf) + dt_true_lb;
+ REQ_FIELD(rreq, iov_buf)[0].length = data_sz;
+ }
+ else {
mpi_errno = _mxm_process_rdtype(&rreq, rreq->dev.datatype, dt_ptr, data_sz,
rreq->dev.user_buf, rreq->dev.user_count,
&REQ_FIELD(rreq, iov_buf), &REQ_FIELD(rreq, iov_count));
@@ -191,77 +197,82 @@ int MPID_nem_mxm_recv(MPIDI_VC_t *vc, MPID_Request *rreq)
}
mpi_errno = _mxm_irecv((vc ? VC_FIELD(vc, mxm_ep) : NULL), REQ_BASE(rreq),
- tag, (rreq->comm ? (mxm_mq_h)rreq->comm->ch.netmod_comm : mxm_obj->mxm_mq), _mxm_tag_mpi2mxm(tag, context_id));
+ tag,
+ (rreq->comm ? (mxm_mq_h) rreq->comm->ch.netmod_comm : mxm_obj->
+ mxm_mq), _mxm_tag_mpi2mxm(tag, context_id));
if (mpi_errno)
MPIU_ERR_POP(mpi_errno);
}
- if (vc) _dbg_mxm_out_req(rreq);
+ if (vc)
+ _dbg_mxm_out_req(rreq);
- fn_exit:
+ fn_exit:
MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_RECV);
return mpi_errno;
- fn_fail: ATTRIBUTE((unused))
- goto fn_exit;
+ fn_fail:ATTRIBUTE((unused))
+ goto fn_exit;
}
-static int _mxm_handle_rreq(MPID_Request *req)
+static int _mxm_handle_rreq(MPID_Request * req)
{
- int mpi_errno = MPI_SUCCESS;
- int complete = FALSE;
- int dt_contig;
- MPI_Aint dt_true_lb;
+ int mpi_errno = MPI_SUCCESS;
+ int complete = FALSE;
+ int dt_contig;
+ MPI_Aint dt_true_lb;
MPIDI_msg_sz_t userbuf_sz;
MPID_Datatype *dt_ptr;
MPIDI_msg_sz_t data_sz;
- MPIDI_VC_t *vc = NULL;
+ MPIDI_VC_t *vc = NULL;
- MPIU_THREAD_CS_ENTER(MSGQUEUE,req);
+ MPIU_THREAD_CS_ENTER(MSGQUEUE, req);
complete = MPIDI_CH3U_Recvq_DP(req)
- MPIU_THREAD_CS_EXIT(MSGQUEUE,req);
+ MPIU_THREAD_CS_EXIT(MSGQUEUE, req);
if (!complete) {
return TRUE;
}
- MPIDI_Datatype_get_info(req->dev.user_count, req->dev.datatype, dt_contig, userbuf_sz, dt_ptr, dt_true_lb);
+ MPIDI_Datatype_get_info(req->dev.user_count, req->dev.datatype, dt_contig, userbuf_sz, dt_ptr,
+ dt_true_lb);
_dbg_mxm_output(5, "========> Completing RECV req %p status %d\n", req, req->status.MPI_ERROR);
_dbg_mxm_out_buf(REQ_FIELD(req, iov_buf)[0].ptr,
- (REQ_FIELD(req, iov_buf)[0].length > 16 ? 16 : REQ_FIELD(req, iov_buf)[0].length));
+ (REQ_FIELD(req, iov_buf)[0].length >
+ 16 ? 16 : REQ_FIELD(req, iov_buf)[0].length));
if (req->dev.recv_data_sz <= userbuf_sz) {
data_sz = req->dev.recv_data_sz;
if (req->status.MPI_ERROR == MPI_ERR_TRUNCATE) {
req->status.MPI_ERROR = MPIR_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_TRUNCATE,
- "**truncate", "**truncate %d %d %d %d",
- req->status.MPI_SOURCE, req->status.MPI_TAG,
- req->dev.recv_data_sz, userbuf_sz );
+ MPIR_ERR_RECOVERABLE, FCNAME, __LINE__,
+ MPI_ERR_TRUNCATE, "**truncate",
+ "**truncate %d %d %d %d",
+ req->status.MPI_SOURCE,
+ req->status.MPI_TAG, req->dev.recv_data_sz,
+ userbuf_sz);
}
}
- else
- {
+ else {
data_sz = userbuf_sz;
MPIR_STATUS_SET_COUNT(req->status, userbuf_sz);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "receive buffer too small; message truncated, msg_sz="
- MPIDI_MSG_SZ_FMT ", userbuf_sz="
- MPIDI_MSG_SZ_FMT,
- req->dev.recv_data_sz, userbuf_sz));
+ MPIU_DBG_MSG_FMT(CH3_OTHER, VERBOSE, (MPIU_DBG_FDEST,
+ "receive buffer too small; message truncated, msg_sz="
+ MPIDI_MSG_SZ_FMT ", userbuf_sz="
+ MPIDI_MSG_SZ_FMT, req->dev.recv_data_sz, userbuf_sz));
req->status.MPI_ERROR = MPIR_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_TRUNCATE,
- "**truncate", "**truncate %d %d %d %d",
- req->status.MPI_SOURCE, req->status.MPI_TAG,
- req->dev.recv_data_sz, userbuf_sz );
+ MPIR_ERR_RECOVERABLE, FCNAME, __LINE__,
+ MPI_ERR_TRUNCATE, "**truncate",
+ "**truncate %d %d %d %d",
+ req->status.MPI_SOURCE, req->status.MPI_TAG,
+ req->dev.recv_data_sz, userbuf_sz);
}
- if ((!dt_contig) && (req->dev.tmpbuf != NULL))
- {
+ if ((!dt_contig) && (req->dev.tmpbuf != NULL)) {
MPIDI_msg_sz_t last;
last = req->dev.recv_data_sz;
- MPID_Segment_unpack( req->dev.segment_ptr, 0, &last, req->dev.tmpbuf);
+ MPID_Segment_unpack(req->dev.segment_ptr, 0, &last, req->dev.tmpbuf);
MPIU_Free(req->dev.tmpbuf);
if (last != data_sz) {
MPIR_STATUS_SET_COUNT(req->status, last);
@@ -286,7 +297,7 @@ static int _mxm_handle_rreq(MPID_Request *req)
static void _mxm_recv_completion_cb(void *context)
{
- MPID_Request *req = (MPID_Request *)context;
+ MPID_Request *req = (MPID_Request *) context;
mxm_recv_req_t *mxm_rreq;
MPIU_Assert(req);
@@ -296,14 +307,15 @@ static void _mxm_recv_completion_cb(void *context)
_mxm_to_mpi_status(REQ_FIELD(req, mxm_req->item.base.error), &req->status);
mxm_rreq = &REQ_FIELD(req, mxm_req->item.recv);
- req->status.MPI_TAG = _mxm_tag_mxm2mpi(mxm_rreq->completion.sender_tag);
+ req->status.MPI_TAG = _mxm_tag_mxm2mpi(mxm_rreq->completion.sender_tag);
req->status.MPI_SOURCE = mxm_rreq->completion.sender_imm;
req->dev.recv_data_sz = mxm_rreq->completion.actual_len;
MPIR_STATUS_SET_COUNT(req->status, req->dev.recv_data_sz);
if (req->ch.vc) {
list_enqueue(&VC_FIELD(req->ch.vc, mxm_ep->free_queue), &REQ_FIELD(req, mxm_req->queue));
- } else {
+ }
+ else {
list_enqueue(&mxm_obj->free_queue, &REQ_FIELD(req, mxm_req->queue));
}
@@ -313,12 +325,13 @@ static void _mxm_recv_completion_cb(void *context)
}
-static int _mxm_irecv(MPID_nem_mxm_ep_t *ep, MPID_nem_mxm_req_area *req, int id, mxm_mq_h mxm_mq, mxm_tag_t mxm_tag)
+static int _mxm_irecv(MPID_nem_mxm_ep_t * ep, MPID_nem_mxm_req_area * req, int id, mxm_mq_h mxm_mq,
+ mxm_tag_t mxm_tag)
{
int mpi_errno = MPI_SUCCESS;
mxm_error_t ret = MXM_OK;
mxm_recv_req_t *mxm_rreq;
- list_head_t *free_queue =NULL;
+ list_head_t *free_queue = NULL;
MPIU_Assert(req);
@@ -335,30 +348,32 @@ static int _mxm_irecv(MPID_nem_mxm_ep_t *ep, MPID_nem_mxm_req_area *req, int id,
}
mxm_rreq = &(req->mxm_req->item.recv);
- mxm_rreq->base.state = MXM_REQ_NEW;
- mxm_rreq->base.mq = mxm_mq;
- mxm_rreq->base.conn = (ep ? ep->mxm_conn : 0);
- mxm_rreq->base.completed_cb = _mxm_recv_completion_cb;
- mxm_rreq->base.context = req->ctx;
+ mxm_rreq->base.state = MXM_REQ_NEW;
+ mxm_rreq->base.mq = mxm_mq;
+ mxm_rreq->base.conn = (ep ? ep->mxm_conn : 0);
+ mxm_rreq->base.completed_cb = _mxm_recv_completion_cb;
+ mxm_rreq->base.context = req->ctx;
- mxm_rreq->tag = mxm_tag;
- mxm_rreq->tag_mask = _mxm_tag_mask(id);
+ mxm_rreq->tag = mxm_tag;
+ mxm_rreq->tag_mask = _mxm_tag_mask(id);
if (likely(req->iov_count == 1)) {
- mxm_rreq->base.data_type = MXM_REQ_DATA_BUFFER;
- mxm_rreq->base.data.buffer.ptr = req->iov_buf[0].ptr;
+ mxm_rreq->base.data_type = MXM_REQ_DATA_BUFFER;
+ mxm_rreq->base.data.buffer.ptr = req->iov_buf[0].ptr;
mxm_rreq->base.data.buffer.length = req->iov_buf[0].length;
- } else {
- mxm_rreq->base.data_type = MXM_REQ_DATA_IOV;
- mxm_rreq->base.data.iov.vector = req->iov_buf;
- mxm_rreq->base.data.iov.count = req->iov_count;
+ }
+ else {
+ mxm_rreq->base.data_type = MXM_REQ_DATA_IOV;
+ mxm_rreq->base.data.iov.vector = req->iov_buf;
+ mxm_rreq->base.data.iov.count = req->iov_count;
}
ret = mxm_req_recv(mxm_rreq);
if (MXM_OK != ret) {
if (ep) {
list_enqueue(&ep->free_queue, &req->mxm_req->queue);
- } else {
+ }
+ else {
list_enqueue(&mxm_obj->free_queue, &req->mxm_req->queue);
}
mpi_errno = MPI_ERR_OTHER;
@@ -366,35 +381,36 @@ static int _mxm_irecv(MPID_nem_mxm_ep_t *ep, MPID_nem_mxm_req_area *req, int id,
}
// list_enqueue(&ep->out_queue, &req->mxm_req->queue);
-fn_exit:
+ fn_exit:
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
-static int _mxm_process_rdtype(MPID_Request **rreq_p, MPI_Datatype datatype, MPID_Datatype *dt_ptr, MPIDI_msg_sz_t data_sz,
- const void *buf, int count,
- mxm_req_buffer_t **iov_buf, int *iov_count)
+static int _mxm_process_rdtype(MPID_Request ** rreq_p, MPI_Datatype datatype,
+ MPID_Datatype * dt_ptr, MPIDI_msg_sz_t data_sz, const void *buf,
+ int count, mxm_req_buffer_t ** iov_buf, int *iov_count)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *rreq = *rreq_p;
+ MPID_Request *rreq = *rreq_p;
MPIDI_msg_sz_t last;
- MPID_IOV *iov;
- int n_iov = 0;
- int index;
+ MPID_IOV *iov;
+ int n_iov = 0;
+ int index;
- if (rreq->dev.segment_ptr == NULL)
- {
+ if (rreq->dev.segment_ptr == NULL) {
rreq->dev.segment_ptr = MPID_Segment_alloc();
- MPIU_ERR_CHKANDJUMP1((rreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ MPIU_ERR_CHKANDJUMP1((rreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem",
+ "**nomem %s", "MPID_Segment_alloc");
}
MPID_Segment_init(buf, count, datatype, rreq->dev.segment_ptr, 0);
rreq->dev.segment_first = 0;
rreq->dev.segment_size = data_sz;
last = rreq->dev.segment_size;
- MPID_Segment_count_contig_blocks(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, (MPI_Aint *)&n_iov);
+ MPID_Segment_count_contig_blocks(rreq->dev.segment_ptr, rreq->dev.segment_first, &last,
+ (MPI_Aint *) & n_iov);
MPIU_Assert(n_iov > 0);
iov = MPIU_Malloc(n_iov * sizeof(*iov));
MPIU_Assert(iov);
@@ -405,32 +421,32 @@ static int _mxm_process_rdtype(MPID_Request **rreq_p, MPI_Datatype datatype, MPI
if (n_iov <= MXM_REQ_DATA_MAX_IOV) {
if (n_iov > MXM_MPICH_MAX_IOV) {
- *iov_buf = (mxm_req_buffer_t *)MPIU_Malloc(n_iov * sizeof(**iov_buf));
+ *iov_buf = (mxm_req_buffer_t *) MPIU_Malloc(n_iov * sizeof(**iov_buf));
MPIU_Assert(*iov_buf);
}
- for(index = 0; index < n_iov ; index++) {
+ for (index = 0; index < n_iov; index++) {
(*iov_buf)[index].ptr = iov[index].MPID_IOV_BUF;
- (*iov_buf)[index].length = iov[index].MPID_IOV_LEN;
+ (*iov_buf)[index].length = iov[index].MPID_IOV_LEN;
}
rreq->dev.tmpbuf = NULL;
rreq->dev.tmpbuf_sz = 0;
*iov_count = n_iov;
- } else {
+ }
+ else {
int packsize = 0;
- MPIR_Pack_size_impl(rreq->dev.user_count, rreq->dev.datatype, (MPI_Aint *)&packsize);
+ MPIR_Pack_size_impl(rreq->dev.user_count, rreq->dev.datatype, (MPI_Aint *) & packsize);
rreq->dev.tmpbuf = MPIU_Malloc((size_t) packsize);
MPIU_Assert(rreq->dev.tmpbuf);
rreq->dev.tmpbuf_sz = packsize;
(*iov_buf)[0].ptr = rreq->dev.tmpbuf;
- (*iov_buf)[0].length = (size_t)packsize;
- *iov_count = 1 ;
+ (*iov_buf)[0].length = (size_t) packsize;
+ *iov_count = 1;
}
MPIU_Free(iov);
-fn_exit:
+ fn_exit:
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
-
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_probe.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_probe.c
index 355e182..a03d410 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_probe.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_probe.c
@@ -13,7 +13,8 @@
#define FUNCNAME MPID_nem_mxm_probe
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_probe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, int context_offset, MPI_Status *status)
+int MPID_nem_mxm_probe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
+ MPI_Status * status)
{
int mpi_errno = MPI_SUCCESS;
mxm_error_t err;
@@ -22,12 +23,12 @@ int MPID_nem_mxm_probe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, in
MPIDI_STATE_DECL(MPID_STATE_MXM_PROBE);
MPIDI_FUNC_ENTER(MPID_STATE_MXM_PROBE);
- mxm_req.base.state = MXM_REQ_NEW;
- mxm_req.base.mq = (mxm_mq_h)comm->ch.netmod_comm;
- mxm_req.base.conn = (vc ? VC_FIELD(vc, mxm_ep->mxm_conn) : 0);
+ mxm_req.base.state = MXM_REQ_NEW;
+ mxm_req.base.mq = (mxm_mq_h) comm->ch.netmod_comm;
+ mxm_req.base.conn = (vc ? VC_FIELD(vc, mxm_ep->mxm_conn) : 0);
- mxm_req.tag = _mxm_tag_mpi2mxm(tag, comm->context_id + context_offset);
- mxm_req.tag_mask = _mxm_tag_mask(tag);
+ mxm_req.tag = _mxm_tag_mpi2mxm(tag, comm->context_id + context_offset);
+ mxm_req.tag_mask = _mxm_tag_mask(tag);
do {
err = mxm_req_probe(&mxm_req);
@@ -37,16 +38,17 @@ int MPID_nem_mxm_probe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, in
if (MXM_OK == err) {
_mxm_to_mpi_status(mxm_req.base.error, status);
status->MPI_SOURCE = mxm_req.completion.sender_imm;
- status->MPI_TAG = _mxm_tag_mxm2mpi(mxm_req.completion.sender_tag);
+ status->MPI_TAG = _mxm_tag_mxm2mpi(mxm_req.completion.sender_tag);
MPIR_STATUS_SET_COUNT(*status, mxm_req.completion.sender_len);
- } else {
+ }
+ else {
mpi_errno = MPI_ERR_INTERN;
}
-fn_exit:
+ fn_exit:
MPIDI_FUNC_EXIT(MPID_STATE_MXM_PROBE);
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
@@ -55,7 +57,8 @@ fn_fail:
#define FUNCNAME MPID_nem_mxm_iprobe
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_iprobe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, int context_offset, int *flag, MPI_Status *status)
+int MPID_nem_mxm_iprobe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
+ int *flag, MPI_Status * status)
{
int mpi_errno = MPI_SUCCESS;
mxm_error_t err;
@@ -64,30 +67,32 @@ int MPID_nem_mxm_iprobe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, i
MPIDI_STATE_DECL(MPID_STATE_MXM_IPROBE);
MPIDI_FUNC_ENTER(MPID_STATE_MXM_IPROBE);
- mxm_req.base.state = MXM_REQ_NEW;
- mxm_req.base.mq = (mxm_mq_h)comm->ch.netmod_comm;
- mxm_req.base.conn = (vc ? VC_FIELD(vc, mxm_ep->mxm_conn) : 0);
+ mxm_req.base.state = MXM_REQ_NEW;
+ mxm_req.base.mq = (mxm_mq_h) comm->ch.netmod_comm;
+ mxm_req.base.conn = (vc ? VC_FIELD(vc, mxm_ep->mxm_conn) : 0);
- mxm_req.tag = _mxm_tag_mpi2mxm(tag, comm->context_id + context_offset);
- mxm_req.tag_mask = _mxm_tag_mask(tag);
+ mxm_req.tag = _mxm_tag_mpi2mxm(tag, comm->context_id + context_offset);
+ mxm_req.tag_mask = _mxm_tag_mask(tag);
err = mxm_req_probe(&mxm_req);
if (MXM_OK == err) {
*flag = 1;
_mxm_to_mpi_status(mxm_req.base.error, status);
status->MPI_SOURCE = mxm_req.completion.sender_imm;
- status->MPI_TAG = _mxm_tag_mxm2mpi(mxm_req.completion.sender_tag);
+ status->MPI_TAG = _mxm_tag_mxm2mpi(mxm_req.completion.sender_tag);
MPIR_STATUS_SET_COUNT(*status, mxm_req.completion.sender_len);
- } else if (MXM_ERR_NO_MESSAGE == err) {
+ }
+ else if (MXM_ERR_NO_MESSAGE == err) {
*flag = 0;
- } else {
+ }
+ else {
mpi_errno = MPI_ERR_INTERN;
}
-fn_exit:
+ fn_exit:
MPIDI_FUNC_EXIT(MPID_STATE_MXM_IPROBE);
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
@@ -96,7 +101,8 @@ fn_fail:
#define FUNCNAME MPID_nem_mxm_improbe
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_improbe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, int context_offset, int *flag, MPID_Request **message, MPI_Status *status)
+int MPID_nem_mxm_improbe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
+ int *flag, MPID_Request ** message, MPI_Status * status)
{
int mpi_errno = MPI_SUCCESS;
@@ -105,10 +111,10 @@ int MPID_nem_mxm_improbe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm,
MPIU_Assert(0 && "not currently implemented");
-fn_exit:
+ fn_exit:
MPIDI_FUNC_EXIT(MPID_STATE_MXM_IMPROBE);
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
@@ -117,7 +123,8 @@ fn_fail:
#define FUNCNAME MPID_nem_mxm_anysource_iprobe
#undef FCNAME
#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPID_nem_mxm_anysource_iprobe(int tag, MPID_Comm *comm, int context_offset, int *flag, MPI_Status *status)
+int MPID_nem_mxm_anysource_iprobe(int tag, MPID_Comm * comm, int context_offset, int *flag,
+ MPI_Status * status)
{
return MPID_nem_mxm_iprobe(NULL, MPI_ANY_SOURCE, tag, comm, context_offset, flag, status);
}
@@ -127,7 +134,9 @@ int MPID_nem_mxm_anysource_iprobe(int tag, MPID_Comm *comm, int context_offset,
#define FUNCNAME MPID_nem_mxm_anysource_iprobe
#undef FCNAME
#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPID_nem_mxm_anysource_improbe(int tag, MPID_Comm *comm, int context_offset, int *flag, MPID_Request **message, MPI_Status *status)
+int MPID_nem_mxm_anysource_improbe(int tag, MPID_Comm * comm, int context_offset, int *flag,
+ MPID_Request ** message, MPI_Status * status)
{
- return MPID_nem_mxm_improbe(NULL, MPI_ANY_SOURCE, tag, comm, context_offset, flag, message, status);
+ return MPID_nem_mxm_improbe(NULL, MPI_ANY_SOURCE, tag, comm, context_offset, flag, message,
+ status);
}
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c
index 135cff4..7a8f12a 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c
@@ -15,20 +15,21 @@ enum {
};
-static int _mxm_handle_sreq(MPID_Request *req);
+static int _mxm_handle_sreq(MPID_Request * req);
static void _mxm_send_completion_cb(void *context);
-static int _mxm_isend(MPID_nem_mxm_ep_t *ep, MPID_nem_mxm_req_area *req,
+static int _mxm_isend(MPID_nem_mxm_ep_t * ep, MPID_nem_mxm_req_area * req,
int type, mxm_mq_h mxm_mq, int mxm_rank, int id, mxm_tag_t tag, int block);
-static int _mxm_process_sdtype(MPID_Request **rreq_p, MPI_Datatype datatype, MPID_Datatype *dt_ptr, MPIDI_msg_sz_t data_sz,
- const void *buf, int count,
- mxm_req_buffer_t **iov_buf, int *iov_count);
+static int _mxm_process_sdtype(MPID_Request ** rreq_p, MPI_Datatype datatype,
+ MPID_Datatype * dt_ptr, MPIDI_msg_sz_t data_sz, const void *buf,
+ int count, mxm_req_buffer_t ** iov_buf, int *iov_count);
#undef FUNCNAME
#define FUNCNAME MPID_nem_mxm_iSendContig
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data, MPIDI_msg_sz_t data_sz)
+int MPID_nem_mxm_iSendContig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr, MPIDI_msg_sz_t hdr_sz,
+ void *data, MPIDI_msg_sz_t data_sz)
{
int mpi_errno = MPI_SUCCESS;
@@ -37,23 +38,24 @@ int MPID_nem_mxm_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPID
MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "mxm_iSendContig");
- MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t *)hdr);
+ MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t *) hdr);
- MPIU_Memcpy(&(sreq->dev.pending_pkt), (char *)hdr, sizeof(MPIDI_CH3_Pkt_t));
+ MPIU_Memcpy(&(sreq->dev.pending_pkt), (char *) hdr, sizeof(MPIDI_CH3_Pkt_t));
sreq->dev.tmpbuf = NULL;
REQ_FIELD(sreq, ctx) = sreq;
REQ_FIELD(sreq, iov_buf) = REQ_FIELD(sreq, tmp_buf);
REQ_FIELD(sreq, iov_count) = 1;
- REQ_FIELD(sreq, iov_buf)[0].ptr = (void *)&(sreq->dev.pending_pkt);
- REQ_FIELD(sreq, iov_buf)[0].length = sizeof(MPIDI_CH3_Pkt_t);
+ REQ_FIELD(sreq, iov_buf)[0].ptr = (void *) &(sreq->dev.pending_pkt);
+ REQ_FIELD(sreq, iov_buf)[0].length = sizeof(MPIDI_CH3_Pkt_t);
if (data_sz) {
REQ_FIELD(sreq, iov_count) = 2;
- REQ_FIELD(sreq, iov_buf)[1].ptr = (void *)data;
- REQ_FIELD(sreq, iov_buf)[1].length = data_sz;
+ REQ_FIELD(sreq, iov_buf)[1].ptr = (void *) data;
+ REQ_FIELD(sreq, iov_buf)[1].length = data_sz;
}
- _dbg_mxm_output(5, "iSendContig ========> Sending ADI msg for req %p (data_size %d, %d) \n", sreq, sizeof(MPIDI_CH3_Pkt_t), data_sz);
+ _dbg_mxm_output(5, "iSendContig ========> Sending ADI msg for req %p (data_size %d, %d) \n",
+ sreq, sizeof(MPIDI_CH3_Pkt_t), data_sz);
(VC_FIELD(vc, pending_sends)) += 1;
sreq->ch.vc = vc;
@@ -64,10 +66,10 @@ int MPID_nem_mxm_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPID
if (mpi_errno)
MPIU_ERR_POP(mpi_errno);
- fn_exit:
+ fn_exit:
MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_ISENDCONTIGMSG);
return mpi_errno;
- fn_fail:
+ fn_fail:
goto fn_exit;
}
@@ -76,38 +78,40 @@ int MPID_nem_mxm_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPID
#define FUNCNAME MPID_nem_mxm_iStartContigMsg
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data, MPIDI_msg_sz_t data_sz, MPID_Request **sreq_ptr)
+int MPID_nem_mxm_iStartContigMsg(MPIDI_VC_t * vc, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data,
+ MPIDI_msg_sz_t data_sz, MPID_Request ** sreq_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *sreq = NULL;
+ MPID_Request *sreq = NULL;
MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ISTARTCONTIGMSG);
MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_ISTARTCONTIGMSG);
MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "mxm_iStartContigMsg");
- MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t *)hdr);
+ MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t *) hdr);
/* create a request */
sreq = MPID_Request_create();
MPIU_Assert(sreq != NULL);
MPIU_Object_set_ref(sreq, 2);
- MPIU_Memcpy(&(sreq->dev.pending_pkt), (char *)hdr, sizeof(MPIDI_CH3_Pkt_t));
+ MPIU_Memcpy(&(sreq->dev.pending_pkt), (char *) hdr, sizeof(MPIDI_CH3_Pkt_t));
sreq->kind = MPID_REQUEST_SEND;
sreq->dev.OnDataAvail = NULL;
sreq->dev.tmpbuf = NULL;
- _dbg_mxm_output(5, "iStartContigMsg ========> Sending ADI msg for req %p (data_size %d, %d) \n", sreq, sizeof(MPIDI_CH3_Pkt_t), data_sz);
+ _dbg_mxm_output(5, "iStartContigMsg ========> Sending ADI msg for req %p (data_size %d, %d) \n",
+ sreq, sizeof(MPIDI_CH3_Pkt_t), data_sz);
REQ_FIELD(sreq, ctx) = sreq;
REQ_FIELD(sreq, iov_buf) = REQ_FIELD(sreq, tmp_buf);
REQ_FIELD(sreq, iov_count) = 1;
- REQ_FIELD(sreq, iov_buf)[0].ptr = (void *)&(sreq->dev.pending_pkt);
- REQ_FIELD(sreq, iov_buf)[0].length = sizeof(MPIDI_CH3_Pkt_t);
+ REQ_FIELD(sreq, iov_buf)[0].ptr = (void *) &(sreq->dev.pending_pkt);
+ REQ_FIELD(sreq, iov_buf)[0].length = sizeof(MPIDI_CH3_Pkt_t);
if (data_sz) {
REQ_FIELD(sreq, iov_count) = 2;
- REQ_FIELD(sreq, iov_buf)[1].ptr = (void *)data;
- REQ_FIELD(sreq, iov_buf)[1].length = data_sz;
+ REQ_FIELD(sreq, iov_buf)[1].ptr = (void *) data;
+ REQ_FIELD(sreq, iov_buf)[1].length = data_sz;
}
(VC_FIELD(vc, pending_sends)) += 1;
@@ -119,11 +123,11 @@ int MPID_nem_mxm_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_s
if (mpi_errno)
MPIU_ERR_POP(mpi_errno);
- fn_exit:
+ fn_exit:
*sreq_ptr = sreq;
MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MX_ISTARTCONTIGMSG);
return mpi_errno;
- fn_fail:
+ fn_fail:
goto fn_exit;
}
@@ -132,7 +136,8 @@ int MPID_nem_mxm_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_s
#define FUNCNAME MPID_nem_mxm_SendNoncontig
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPIDI_msg_sz_t hdr_sz)
+int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr,
+ MPIDI_msg_sz_t hdr_sz)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_msg_sz_t last;
@@ -143,28 +148,29 @@ int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MP
MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "MPID_nem_mxm_iSendNoncontig");
- MPIU_Memcpy(&(sreq->dev.pending_pkt), (char *)hdr, sizeof(MPIDI_CH3_Pkt_t));
+ MPIU_Memcpy(&(sreq->dev.pending_pkt), (char *) hdr, sizeof(MPIDI_CH3_Pkt_t));
sreq->dev.tmpbuf = NULL;
- _dbg_mxm_output(5, "SendNoncontig ========> Sending ADI msg for req %p (data_size %d, %d) \n", sreq, sizeof(MPIDI_CH3_Pkt_t), sreq->dev.segment_size);
+ _dbg_mxm_output(5, "SendNoncontig ========> Sending ADI msg for req %p (data_size %d, %d) \n",
+ sreq, sizeof(MPIDI_CH3_Pkt_t), sreq->dev.segment_size);
REQ_FIELD(sreq, ctx) = sreq;
REQ_FIELD(sreq, iov_buf) = REQ_FIELD(sreq, tmp_buf);
REQ_FIELD(sreq, iov_count) = 1;
- REQ_FIELD(sreq, iov_buf)[0].ptr = (void *)&(sreq->dev.pending_pkt);
- REQ_FIELD(sreq, iov_buf)[0].length = sizeof(MPIDI_CH3_Pkt_t);
+ REQ_FIELD(sreq, iov_buf)[0].ptr = (void *) &(sreq->dev.pending_pkt);
+ REQ_FIELD(sreq, iov_buf)[0].length = sizeof(MPIDI_CH3_Pkt_t);
MPIU_Assert(sreq->dev.segment_first == 0);
last = sreq->dev.segment_size;
if (last > 0) {
- sreq->dev.tmpbuf = MPIU_Malloc((size_t)sreq->dev.segment_size);
+ sreq->dev.tmpbuf = MPIU_Malloc((size_t) sreq->dev.segment_size);
MPIU_Assert(sreq->dev.tmpbuf);
MPID_Segment_pack(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, sreq->dev.tmpbuf);
MPIU_Assert(last == sreq->dev.segment_size);
REQ_FIELD(sreq, iov_count) = 2;
REQ_FIELD(sreq, iov_buf)[1].ptr = sreq->dev.tmpbuf;
- REQ_FIELD(sreq, iov_buf)[1].length = last;
+ REQ_FIELD(sreq, iov_buf)[1].length = last;
}
(VC_FIELD(vc, pending_sends)) += 1;
@@ -176,10 +182,10 @@ int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MP
if (mpi_errno)
MPIU_ERR_POP(mpi_errno);
- fn_exit:
+ fn_exit:
MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_SENDNONCONTIGMSG);
return mpi_errno;
- fn_fail:
+ fn_fail:
goto fn_exit;
}
@@ -188,15 +194,15 @@ int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MP
#define FUNCNAME MPID_nem_mxm_send
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_send(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype datatype, int rank, int tag,
- MPID_Comm * comm, int context_offset, MPID_Request **sreq_ptr)
+int MPID_nem_mxm_send(MPIDI_VC_t * vc, const void *buf, int count, MPI_Datatype datatype, int rank,
+ int tag, MPID_Comm * comm, int context_offset, MPID_Request ** sreq_ptr)
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *sreq = NULL;
MPID_Datatype *dt_ptr;
- int dt_contig;
+ int dt_contig;
MPIDI_msg_sz_t data_sz;
- MPI_Aint dt_true_lb;
+ MPI_Aint dt_true_lb;
MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_SEND);
MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_SEND);
@@ -205,7 +211,7 @@ int MPID_nem_mxm_send(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype
/* create a request */
MPIDI_Request_create_sreq(sreq, mpi_errno, goto fn_exit);
- MPIU_Assert (sreq != NULL);
+ MPIU_Assert(sreq != NULL);
MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_SEND);
MPIDI_VC_FAI_send_seqnum(vc, seqnum);
MPIDI_Request_set_seqnum(sreq, seqnum);
@@ -219,38 +225,41 @@ int MPID_nem_mxm_send(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype
sreq->ch.vc = vc;
sreq->ch.noncontig = FALSE;
- _dbg_mxm_output(5, "Send ========> Sending USER msg for req %p (context %d rank %d tag %d size %d) \n",
+ _dbg_mxm_output(5,
+ "Send ========> Sending USER msg for req %p (context %d rank %d tag %d size %d) \n",
sreq, comm->context_id + context_offset, comm->rank, tag, data_sz);
REQ_FIELD(sreq, ctx) = sreq;
REQ_FIELD(sreq, iov_buf) = REQ_FIELD(sreq, tmp_buf);
REQ_FIELD(sreq, iov_count) = 0;
REQ_FIELD(sreq, iov_buf)[0].ptr = NULL;
- REQ_FIELD(sreq, iov_buf)[0].length = 0;
+ REQ_FIELD(sreq, iov_buf)[0].length = 0;
if (data_sz) {
if (dt_contig) {
REQ_FIELD(sreq, iov_count) = 1;
- REQ_FIELD(sreq, iov_buf)[0].ptr = (char*)(buf) + dt_true_lb;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = (char *) (buf) + dt_true_lb;
REQ_FIELD(sreq, iov_buf)[0].length = data_sz;
- } else {
+ }
+ else {
MPIDI_msg_sz_t last;
MPI_Aint packsize = 0;
sreq->dev.segment_ptr = MPID_Segment_alloc();
- MPIU_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ MPIU_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER,
+ "**nomem", "**nomem %s", "MPID_Segment_alloc");
MPIR_Pack_size_impl(count, datatype, &packsize);
last = data_sz;
if (packsize > 0) {
- sreq->dev.tmpbuf = MPIU_Malloc((size_t)packsize);
+ sreq->dev.tmpbuf = MPIU_Malloc((size_t) packsize);
MPIU_Assert(sreq->dev.tmpbuf);
MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
MPID_Segment_pack(sreq->dev.segment_ptr, 0, &last, sreq->dev.tmpbuf);
REQ_FIELD(sreq, iov_count) = 1;
REQ_FIELD(sreq, iov_buf)[0].ptr = sreq->dev.tmpbuf;
- REQ_FIELD(sreq, iov_buf)[0].length = last;
+ REQ_FIELD(sreq, iov_buf)[0].length = last;
}
sreq->ch.noncontig = TRUE;
}
@@ -259,17 +268,22 @@ int MPID_nem_mxm_send(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype
(VC_FIELD(vc, pending_sends)) += 1;
mpi_errno = _mxm_isend(VC_FIELD(vc, mxm_ep), REQ_BASE(sreq), MXM_MPICH_ISEND,
- (mxm_mq_h)comm->ch.netmod_comm, comm->rank, tag, _mxm_tag_mpi2mxm(tag, comm->context_id + context_offset), 1);
+ (mxm_mq_h) comm->ch.netmod_comm, comm->rank, tag, _mxm_tag_mpi2mxm(tag,
+ comm->
+ context_id
+ +
+ context_offset),
+ 1);
if (mpi_errno)
MPIU_ERR_POP(mpi_errno);
_dbg_mxm_out_req(sreq);
-fn_exit:
+ fn_exit:
*sreq_ptr = sreq;
MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_SEND);
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
@@ -278,15 +292,15 @@ fn_fail:
#define FUNCNAME MPID_nem_mxm_ssend
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_ssend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype datatype, int rank, int tag,
- MPID_Comm * comm, int context_offset, MPID_Request **sreq_ptr)
+int MPID_nem_mxm_ssend(MPIDI_VC_t * vc, const void *buf, int count, MPI_Datatype datatype, int rank,
+ int tag, MPID_Comm * comm, int context_offset, MPID_Request ** sreq_ptr)
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *sreq = NULL;
MPID_Datatype *dt_ptr;
- int dt_contig;
+ int dt_contig;
MPIDI_msg_sz_t data_sz;
- MPI_Aint dt_true_lb;
+ MPI_Aint dt_true_lb;
MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_SSEND);
MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_SSEND);
@@ -295,7 +309,7 @@ int MPID_nem_mxm_ssend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype
/* create a request */
MPIDI_Request_create_sreq(sreq, mpi_errno, goto fn_exit);
- MPIU_Assert (sreq != NULL);
+ MPIU_Assert(sreq != NULL);
MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_SEND);
MPIDI_VC_FAI_send_seqnum(vc, seqnum);
MPIDI_Request_set_seqnum(sreq, seqnum);
@@ -309,38 +323,41 @@ int MPID_nem_mxm_ssend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype
sreq->ch.vc = vc;
sreq->ch.noncontig = FALSE;
- _dbg_mxm_output(5, "sSend ========> Sending USER msg for req %p (context %d rank %d tag %d size %d) \n",
+ _dbg_mxm_output(5,
+ "sSend ========> Sending USER msg for req %p (context %d rank %d tag %d size %d) \n",
sreq, comm->context_id + context_offset, comm->rank, tag, data_sz);
REQ_FIELD(sreq, ctx) = sreq;
REQ_FIELD(sreq, iov_buf) = REQ_FIELD(sreq, tmp_buf);
REQ_FIELD(sreq, iov_count) = 0;
REQ_FIELD(sreq, iov_buf)[0].ptr = NULL;
- REQ_FIELD(sreq, iov_buf)[0].length = 0;
+ REQ_FIELD(sreq, iov_buf)[0].length = 0;
if (data_sz) {
if (dt_contig) {
REQ_FIELD(sreq, iov_count) = 1;
- REQ_FIELD(sreq, iov_buf)[0].ptr = (char*)(buf) + dt_true_lb;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = (char *) (buf) + dt_true_lb;
REQ_FIELD(sreq, iov_buf)[0].length = data_sz;
- } else {
+ }
+ else {
MPIDI_msg_sz_t last;
MPI_Aint packsize = 0;
sreq->dev.segment_ptr = MPID_Segment_alloc();
- MPIU_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ MPIU_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER,
+ "**nomem", "**nomem %s", "MPID_Segment_alloc");
MPIR_Pack_size_impl(count, datatype, &packsize);
last = data_sz;
if (packsize > 0) {
- sreq->dev.tmpbuf = MPIU_Malloc((size_t)packsize);
+ sreq->dev.tmpbuf = MPIU_Malloc((size_t) packsize);
MPIU_Assert(sreq->dev.tmpbuf);
MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
MPID_Segment_pack(sreq->dev.segment_ptr, 0, &last, sreq->dev.tmpbuf);
REQ_FIELD(sreq, iov_count) = 1;
REQ_FIELD(sreq, iov_buf)[0].ptr = sreq->dev.tmpbuf;
- REQ_FIELD(sreq, iov_buf)[0].length = last;
+ REQ_FIELD(sreq, iov_buf)[0].length = last;
}
sreq->ch.noncontig = TRUE;
}
@@ -349,17 +366,22 @@ int MPID_nem_mxm_ssend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype
(VC_FIELD(vc, pending_sends)) += 1;
mpi_errno = _mxm_isend(VC_FIELD(vc, mxm_ep), REQ_BASE(sreq), MXM_MPICH_ISEND_SYNC,
- (mxm_mq_h)comm->ch.netmod_comm, comm->rank, tag, _mxm_tag_mpi2mxm(tag, comm->context_id + context_offset), 1);
+ (mxm_mq_h) comm->ch.netmod_comm, comm->rank, tag, _mxm_tag_mpi2mxm(tag,
+ comm->
+ context_id
+ +
+ context_offset),
+ 1);
if (mpi_errno)
MPIU_ERR_POP(mpi_errno);
_dbg_mxm_out_req(sreq);
-fn_exit:
+ fn_exit:
*sreq_ptr = sreq;
MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_SSEND);
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
@@ -368,15 +390,15 @@ fn_fail:
#define FUNCNAME MPID_nem_mxm_isend
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_isend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype datatype, int rank, int tag,
- MPID_Comm * comm, int context_offset, MPID_Request **sreq_ptr)
+int MPID_nem_mxm_isend(MPIDI_VC_t * vc, const void *buf, int count, MPI_Datatype datatype, int rank,
+ int tag, MPID_Comm * comm, int context_offset, MPID_Request ** sreq_ptr)
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *sreq = NULL;
MPID_Datatype *dt_ptr;
- int dt_contig;
+ int dt_contig;
MPIDI_msg_sz_t data_sz;
- MPI_Aint dt_true_lb;
+ MPI_Aint dt_true_lb;
MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ISEND);
MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_ISEND);
@@ -385,7 +407,7 @@ int MPID_nem_mxm_isend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype
/* create a request */
MPIDI_Request_create_sreq(sreq, mpi_errno, goto fn_exit);
- MPIU_Assert (sreq != NULL);
+ MPIU_Assert(sreq != NULL);
MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_SEND);
MPIDI_VC_FAI_send_seqnum(vc, seqnum);
MPIDI_Request_set_seqnum(sreq, seqnum);
@@ -399,38 +421,41 @@ int MPID_nem_mxm_isend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype
sreq->ch.vc = vc;
sreq->ch.noncontig = FALSE;
- _dbg_mxm_output(5, "iSend ========> Sending USER msg for req %p (context %d rank %d tag %d size %d) \n",
+ _dbg_mxm_output(5,
+ "iSend ========> Sending USER msg for req %p (context %d rank %d tag %d size %d) \n",
sreq, comm->context_id + context_offset, comm->rank, tag, data_sz);
REQ_FIELD(sreq, ctx) = sreq;
REQ_FIELD(sreq, iov_buf) = REQ_FIELD(sreq, tmp_buf);
REQ_FIELD(sreq, iov_count) = 0;
REQ_FIELD(sreq, iov_buf)[0].ptr = NULL;
- REQ_FIELD(sreq, iov_buf)[0].length = 0;
+ REQ_FIELD(sreq, iov_buf)[0].length = 0;
if (data_sz) {
if (dt_contig) {
REQ_FIELD(sreq, iov_count) = 1;
- REQ_FIELD(sreq, iov_buf)[0].ptr = (char*)(buf) + dt_true_lb;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = (char *) (buf) + dt_true_lb;
REQ_FIELD(sreq, iov_buf)[0].length = data_sz;
- } else {
+ }
+ else {
MPIDI_msg_sz_t last;
MPI_Aint packsize = 0;
sreq->dev.segment_ptr = MPID_Segment_alloc();
- MPIU_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ MPIU_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER,
+ "**nomem", "**nomem %s", "MPID_Segment_alloc");
MPIR_Pack_size_impl(count, datatype, &packsize);
last = data_sz;
if (packsize > 0) {
- sreq->dev.tmpbuf = MPIU_Malloc((size_t)packsize);
+ sreq->dev.tmpbuf = MPIU_Malloc((size_t) packsize);
MPIU_Assert(sreq->dev.tmpbuf);
MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
MPID_Segment_pack(sreq->dev.segment_ptr, 0, &last, sreq->dev.tmpbuf);
REQ_FIELD(sreq, iov_count) = 1;
REQ_FIELD(sreq, iov_buf)[0].ptr = sreq->dev.tmpbuf;
- REQ_FIELD(sreq, iov_buf)[0].length = last;
+ REQ_FIELD(sreq, iov_buf)[0].length = last;
}
sreq->ch.noncontig = TRUE;
}
@@ -439,17 +464,22 @@ int MPID_nem_mxm_isend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype
(VC_FIELD(vc, pending_sends)) += 1;
mpi_errno = _mxm_isend(VC_FIELD(vc, mxm_ep), REQ_BASE(sreq), MXM_MPICH_ISEND,
- (mxm_mq_h)comm->ch.netmod_comm, comm->rank, tag, _mxm_tag_mpi2mxm(tag, comm->context_id + context_offset), 0);
+ (mxm_mq_h) comm->ch.netmod_comm, comm->rank, tag, _mxm_tag_mpi2mxm(tag,
+ comm->
+ context_id
+ +
+ context_offset),
+ 0);
if (mpi_errno)
MPIU_ERR_POP(mpi_errno);
_dbg_mxm_out_req(sreq);
-fn_exit:
+ fn_exit:
*sreq_ptr = sreq;
MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_ISEND);
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
@@ -458,15 +488,16 @@ fn_fail:
#define FUNCNAME MPID_nem_mxm_issend
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPID_nem_mxm_issend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype datatype, int rank, int tag,
- MPID_Comm * comm, int context_offset, MPID_Request **sreq_ptr)
+int MPID_nem_mxm_issend(MPIDI_VC_t * vc, const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPID_Comm * comm, int context_offset,
+ MPID_Request ** sreq_ptr)
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *sreq = NULL;
MPID_Datatype *dt_ptr;
- int dt_contig;
+ int dt_contig;
MPIDI_msg_sz_t data_sz;
- MPI_Aint dt_true_lb;
+ MPI_Aint dt_true_lb;
MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ISSEND);
MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_ISSEND);
@@ -475,7 +506,7 @@ int MPID_nem_mxm_issend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatyp
/* create a request */
MPIDI_Request_create_sreq(sreq, mpi_errno, goto fn_exit);
- MPIU_Assert (sreq != NULL);
+ MPIU_Assert(sreq != NULL);
MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_SEND);
MPIDI_VC_FAI_send_seqnum(vc, seqnum);
MPIDI_Request_set_seqnum(sreq, seqnum);
@@ -489,38 +520,41 @@ int MPID_nem_mxm_issend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatyp
sreq->ch.vc = vc;
sreq->ch.noncontig = FALSE;
- _dbg_mxm_output(5, "isSend ========> Sending USER msg for req %p (context %d rank %d tag %d size %d) \n",
+ _dbg_mxm_output(5,
+ "isSend ========> Sending USER msg for req %p (context %d rank %d tag %d size %d) \n",
sreq, comm->context_id + context_offset, comm->rank, tag, data_sz);
REQ_FIELD(sreq, ctx) = sreq;
REQ_FIELD(sreq, iov_buf) = REQ_FIELD(sreq, tmp_buf);
REQ_FIELD(sreq, iov_count) = 0;
REQ_FIELD(sreq, iov_buf)[0].ptr = NULL;
- REQ_FIELD(sreq, iov_buf)[0].length = 0;
+ REQ_FIELD(sreq, iov_buf)[0].length = 0;
if (data_sz) {
if (dt_contig) {
REQ_FIELD(sreq, iov_count) = 1;
- REQ_FIELD(sreq, iov_buf)[0].ptr = (char*)(buf) + dt_true_lb;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = (char *) (buf) + dt_true_lb;
REQ_FIELD(sreq, iov_buf)[0].length = data_sz;
- } else {
+ }
+ else {
MPIDI_msg_sz_t last;
MPI_Aint packsize = 0;
sreq->dev.segment_ptr = MPID_Segment_alloc();
- MPIU_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ MPIU_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER,
+ "**nomem", "**nomem %s", "MPID_Segment_alloc");
MPIR_Pack_size_impl(count, datatype, &packsize);
last = data_sz;
if (packsize > 0) {
- sreq->dev.tmpbuf = MPIU_Malloc((size_t)packsize);
+ sreq->dev.tmpbuf = MPIU_Malloc((size_t) packsize);
MPIU_Assert(sreq->dev.tmpbuf);
MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
MPID_Segment_pack(sreq->dev.segment_ptr, 0, &last, sreq->dev.tmpbuf);
REQ_FIELD(sreq, iov_count) = 1;
REQ_FIELD(sreq, iov_buf)[0].ptr = sreq->dev.tmpbuf;
- REQ_FIELD(sreq, iov_buf)[0].length = last;
+ REQ_FIELD(sreq, iov_buf)[0].length = last;
}
sreq->ch.noncontig = TRUE;
}
@@ -529,29 +563,35 @@ int MPID_nem_mxm_issend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatyp
(VC_FIELD(vc, pending_sends)) += 1;
mpi_errno = _mxm_isend(VC_FIELD(vc, mxm_ep), REQ_BASE(sreq), MXM_MPICH_ISEND_SYNC,
- (mxm_mq_h)comm->ch.netmod_comm, comm->rank, tag, _mxm_tag_mpi2mxm(tag, comm->context_id + context_offset), 0);
+ (mxm_mq_h) comm->ch.netmod_comm, comm->rank, tag, _mxm_tag_mpi2mxm(tag,
+ comm->
+ context_id
+ +
+ context_offset),
+ 0);
if (mpi_errno)
MPIU_ERR_POP(mpi_errno);
_dbg_mxm_out_req(sreq);
-fn_exit:
+ fn_exit:
*sreq_ptr = sreq;
MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_ISSEND);
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
-static int _mxm_handle_sreq(MPID_Request *req)
+static int _mxm_handle_sreq(MPID_Request * req)
{
int complete = FALSE;
- int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
+ int (*reqFn) (MPIDI_VC_t *, MPID_Request *, int *);
_dbg_mxm_output(5, "========> Completing SEND req %p status %d\n", req, req->status.MPI_ERROR);
_dbg_mxm_out_buf(REQ_FIELD(req, iov_buf)[0].ptr,
- (REQ_FIELD(req, iov_buf)[0].length > 16 ? 16 : REQ_FIELD(req, iov_buf)[0].length));
+ (REQ_FIELD(req, iov_buf)[0].length >
+ 16 ? 16 : REQ_FIELD(req, iov_buf)[0].length));
(VC_FIELD(req->ch.vc, pending_sends)) -= 1;
if (((req->dev.datatype_ptr != NULL) && (req->dev.tmpbuf != NULL))) {
@@ -568,7 +608,8 @@ static int _mxm_handle_sreq(MPID_Request *req)
if (!reqFn) {
MPIDI_CH3U_Request_complete(req);
MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
- } else {
+ }
+ else {
MPIDI_VC_t *vc = req->ch.vc;
reqFn(vc, req, &complete);
@@ -583,7 +624,7 @@ static int _mxm_handle_sreq(MPID_Request *req)
static void _mxm_send_completion_cb(void *context)
{
- MPID_Request *req = (MPID_Request *)context;
+ MPID_Request *req = (MPID_Request *) context;
MPIU_Assert(req);
MPIU_Assert((req->kind == MPID_REQUEST_SEND) || (req->kind == MPID_PREQUEST_SEND));
@@ -599,13 +640,13 @@ static void _mxm_send_completion_cb(void *context)
}
-static int _mxm_isend(MPID_nem_mxm_ep_t *ep, MPID_nem_mxm_req_area *req,
+static int _mxm_isend(MPID_nem_mxm_ep_t * ep, MPID_nem_mxm_req_area * req,
int type, mxm_mq_h mxm_mq, int mxm_rank, int id, mxm_tag_t mxm_tag, int block)
{
int mpi_errno = MPI_SUCCESS;
mxm_error_t ret = MXM_OK;
mxm_send_req_t *mxm_sreq;
- list_head_t *free_queue =NULL;
+ list_head_t *free_queue = NULL;
MPIU_Assert(ep);
MPIU_Assert(req);
@@ -623,40 +664,43 @@ static int _mxm_isend(MPID_nem_mxm_ep_t *ep, MPID_nem_mxm_req_area *req,
}
mxm_sreq = &(req->mxm_req->item.send);
- mxm_sreq->base.state = MXM_REQ_NEW;
- mxm_sreq->base.mq = mxm_mq;
- mxm_sreq->base.conn = ep->mxm_conn;
- mxm_sreq->base.completed_cb = _mxm_send_completion_cb;
- mxm_sreq->base.context = req->ctx;
+ mxm_sreq->base.state = MXM_REQ_NEW;
+ mxm_sreq->base.mq = mxm_mq;
+ mxm_sreq->base.conn = ep->mxm_conn;
+ mxm_sreq->base.completed_cb = _mxm_send_completion_cb;
+ mxm_sreq->base.context = req->ctx;
if (type == MXM_MPICH_ISEND_AM) {
- mxm_sreq->opcode = MXM_REQ_OP_AM;
- mxm_sreq->flags = 0;
-
- mxm_sreq->op.am.hid = id;
- mxm_sreq->op.am.imm_data = mxm_rank;
- } else if (type == MXM_MPICH_ISEND_SYNC) {
- mxm_sreq->opcode = MXM_REQ_OP_SEND_SYNC;
- mxm_sreq->flags = 0;
-
- mxm_sreq->op.send.tag = mxm_tag;
- mxm_sreq->op.send.imm_data = mxm_rank;
- } else {
- mxm_sreq->opcode = MXM_REQ_OP_SEND;
- mxm_sreq->flags = 0;
-
- mxm_sreq->op.send.tag = mxm_tag;
- mxm_sreq->op.send.imm_data = mxm_rank;
+ mxm_sreq->opcode = MXM_REQ_OP_AM;
+ mxm_sreq->flags = 0;
+
+ mxm_sreq->op.am.hid = id;
+ mxm_sreq->op.am.imm_data = mxm_rank;
+ }
+ else if (type == MXM_MPICH_ISEND_SYNC) {
+ mxm_sreq->opcode = MXM_REQ_OP_SEND_SYNC;
+ mxm_sreq->flags = 0;
+
+ mxm_sreq->op.send.tag = mxm_tag;
+ mxm_sreq->op.send.imm_data = mxm_rank;
+ }
+ else {
+ mxm_sreq->opcode = MXM_REQ_OP_SEND;
+ mxm_sreq->flags = 0;
+
+ mxm_sreq->op.send.tag = mxm_tag;
+ mxm_sreq->op.send.imm_data = mxm_rank;
}
if (likely(req->iov_count == 1)) {
- mxm_sreq->base.data_type = MXM_REQ_DATA_BUFFER;
- mxm_sreq->base.data.buffer.ptr = req->iov_buf[0].ptr;
+ mxm_sreq->base.data_type = MXM_REQ_DATA_BUFFER;
+ mxm_sreq->base.data.buffer.ptr = req->iov_buf[0].ptr;
mxm_sreq->base.data.buffer.length = req->iov_buf[0].length;
- } else {
- mxm_sreq->base.data_type = MXM_REQ_DATA_IOV;
- mxm_sreq->base.data.iov.vector = req->iov_buf;
- mxm_sreq->base.data.iov.count = req->iov_count;
+ }
+ else {
+ mxm_sreq->base.data_type = MXM_REQ_DATA_IOV;
+ mxm_sreq->base.data.iov.vector = req->iov_buf;
+ mxm_sreq->base.data.iov.count = req->iov_count;
}
ret = mxm_req_send(mxm_sreq);
@@ -670,34 +714,36 @@ static int _mxm_isend(MPID_nem_mxm_ep_t *ep, MPID_nem_mxm_req_area *req,
_mxm_req_wait(&mxm_sreq->base);
// list_enqueue(&ep->out_queue, &req->mxm_req->queue);
-fn_exit:
+ fn_exit:
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
-static int _mxm_process_sdtype(MPID_Request **sreq_p, MPI_Datatype datatype, MPID_Datatype *dt_ptr, MPIDI_msg_sz_t data_sz,
- const void *buf, int count,
- mxm_req_buffer_t **iov_buf, int *iov_count)
+static int _mxm_process_sdtype(MPID_Request ** sreq_p, MPI_Datatype datatype,
+ MPID_Datatype * dt_ptr, MPIDI_msg_sz_t data_sz, const void *buf,
+ int count, mxm_req_buffer_t ** iov_buf, int *iov_count)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *sreq = *sreq_p;
+ MPID_Request *sreq = *sreq_p;
MPIDI_msg_sz_t last;
- MPID_IOV *iov;
- int n_iov = 0;
- int index;
+ MPID_IOV *iov;
+ int n_iov = 0;
+ int index;
int size_to_copy = 0;
sreq->dev.segment_ptr = MPID_Segment_alloc();
- MPIU_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ MPIU_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem",
+ "**nomem %s", "MPID_Segment_alloc");
MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
sreq->dev.segment_first = 0;
sreq->dev.segment_size = data_sz;
last = sreq->dev.segment_size;
- MPID_Segment_count_contig_blocks(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, (MPI_Aint *)&n_iov);
+ MPID_Segment_count_contig_blocks(sreq->dev.segment_ptr, sreq->dev.segment_first, &last,
+ (MPI_Aint *) & n_iov);
MPIU_Assert(n_iov > 0);
iov = MPIU_Malloc(n_iov * sizeof(*iov));
MPIU_Assert(iov);
@@ -707,15 +753,16 @@ static int _mxm_process_sdtype(MPID_Request **sreq_p, MPI_Datatype datatype, MPI
MPIU_Assert(last == sreq->dev.segment_size);
if (n_iov > MXM_MPICH_MAX_IOV) {
- *iov_buf = (mxm_req_buffer_t *)MPIU_Malloc(n_iov * sizeof(**iov_buf));
+ *iov_buf = (mxm_req_buffer_t *) MPIU_Malloc(n_iov * sizeof(**iov_buf));
MPIU_Assert(*iov_buf);
}
- for(index = 0; index < n_iov ; index++) {
+ for (index = 0; index < n_iov; index++) {
if (index < (MXM_REQ_DATA_MAX_IOV - 1)) {
(*iov_buf)[index].ptr = iov[index].MPID_IOV_BUF;
- (*iov_buf)[index].length = iov[index].MPID_IOV_LEN;
- } else {
+ (*iov_buf)[index].length = iov[index].MPID_IOV_LEN;
+ }
+ else {
size_to_copy += iov[index].MPID_IOV_LEN;
}
}
@@ -724,23 +771,25 @@ static int _mxm_process_sdtype(MPID_Request **sreq_p, MPI_Datatype datatype, MPI
sreq->dev.tmpbuf = NULL;
sreq->dev.tmpbuf_sz = 0;
*iov_count = n_iov;
- } else {
+ }
+ else {
int offset = 0;
sreq->dev.tmpbuf = MPIU_Malloc(size_to_copy);
sreq->dev.tmpbuf_sz = size_to_copy;
MPIU_Assert(sreq->dev.tmpbuf);
- for(index = (MXM_REQ_DATA_MAX_IOV - 1); index < n_iov; index++) {
- MPIU_Memcpy((char *)(sreq->dev.tmpbuf) + offset, iov[index].MPID_IOV_BUF, iov[index].MPID_IOV_LEN);
+ for (index = (MXM_REQ_DATA_MAX_IOV - 1); index < n_iov; index++) {
+ MPIU_Memcpy((char *) (sreq->dev.tmpbuf) + offset, iov[index].MPID_IOV_BUF,
+ iov[index].MPID_IOV_LEN);
offset += iov[index].MPID_IOV_LEN;
}
(*iov_buf)[MXM_REQ_DATA_MAX_IOV - 1].ptr = sreq->dev.tmpbuf;
- (*iov_buf)[MXM_REQ_DATA_MAX_IOV - 1].length = size_to_copy;
+ (*iov_buf)[MXM_REQ_DATA_MAX_IOV - 1].length = size_to_copy;
*iov_count = MXM_REQ_DATA_MAX_IOV;
}
MPIU_Free(iov);
-fn_exit:
+ fn_exit:
return mpi_errno;
-fn_fail:
+ fn_fail:
goto fn_exit;
}
-----------------------------------------------------------------------
Summary of changes:
.../ch3/channels/nemesis/netmod/mxm/mxm_cancel.c | 22 +-
.../ch3/channels/nemesis/netmod/mxm/mxm_finalize.c | 2 -
.../ch3/channels/nemesis/netmod/mxm/mxm_impl.h | 210 +++++-----
.../ch3/channels/nemesis/netmod/mxm/mxm_init.c | 426 ++++++++++----------
.../ch3/channels/nemesis/netmod/mxm/mxm_poll.c | 246 ++++++------
.../ch3/channels/nemesis/netmod/mxm/mxm_probe.c | 63 ++--
.../ch3/channels/nemesis/netmod/mxm/mxm_send.c | 351 +++++++++-------
7 files changed, 698 insertions(+), 622 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.2-10-g020c33d
by noreply@mpich.org 22 Jul '14
by noreply@mpich.org 22 Jul '14
22 Jul '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via 020c33d656620fd1269d9f92c7a0c424f0b0a3c3 (commit)
from 9443bde42e261f681e664114d460aa63134cc2a9 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/020c33d656620fd1269d9f92c7a0c424f…
commit 020c33d656620fd1269d9f92c7a0c424f0b0a3c3
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Tue Jul 22 22:54:53 2014 -0500
Revert "mpid: Add cancel_recv and cancel_send netmod calls"
This reverts commit 9443bde42e261f681e664114d460aa63134cc2a9.
diff --git a/src/mpid/ch3/include/mpidpre.h b/src/mpid/ch3/include/mpidpre.h
index 5545984..8c3a68e 100644
--- a/src/mpid/ch3/include/mpidpre.h
+++ b/src/mpid/ch3/include/mpidpre.h
@@ -176,7 +176,6 @@ typedef struct MPIDI_CH3I_comm
struct MPID_nem_barrier_vars *barrier_vars; /* shared memory variables used in barrier */
struct MPID_Comm *next; /* next pointer for list of communicators */
struct MPID_Comm *prev; /* prev pointer for list of communicators */
- void *netmod_comm; /* netmod communicator context */
}
MPIDI_CH3I_comm_t;
diff --git a/src/mpid/ch3/src/mpid_cancel_recv.c b/src/mpid/ch3/src/mpid_cancel_recv.c
index ce377cb..24a04f6 100644
--- a/src/mpid/ch3/src/mpid_cancel_recv.c
+++ b/src/mpid/ch3/src/mpid_cancel_recv.c
@@ -12,8 +12,6 @@
#define FCNAME MPIDI_QUOTE(FUNCNAME)
int MPID_Cancel_recv(MPID_Request * rreq)
{
- int mpi_errno = MPI_SUCCESS;
-
MPIDI_STATE_DECL(MPID_STATE_MPID_CANCEL_RECV);
MPIDI_FUNC_ENTER(MPID_STATE_MPID_CANCEL_RECV);
@@ -22,23 +20,7 @@ int MPID_Cancel_recv(MPID_Request * rreq)
if (MPIDI_CH3U_Recvq_DP(rreq))
{
- /* code in cancel_recv */
- /* FIXME: The vc is only needed to find which function to call*/
- /* This is otherwise any_source ready */
-#ifdef ENABLE_COMM_OVERRIDES
- {
- MPIDI_VC_t *vc;
- MPIU_Assert(rreq->dev.match.parts.rank != MPI_ANY_SOURCE);
- MPIDI_Comm_get_vc_set_active(rreq->comm, rreq->dev.match.parts.rank, &vc);
- if (vc->comm_ops && vc->comm_ops->cancel_recv)
- {
- mpi_errno = vc->comm_ops->cancel_recv(NULL, rreq);
- if (mpi_errno)
- goto fn_exit;
- }
- }
-#endif
- MPIU_DBG_MSG_P(CH3_OTHER,VERBOSE,
+ MPIU_DBG_MSG_P(CH3_OTHER,VERBOSE,
"request 0x%08x cancelled", rreq->handle);
MPIR_STATUS_SET_CANCEL_BIT(rreq->status, TRUE);
MPIR_STATUS_SET_COUNT(rreq->status, 0);
@@ -51,8 +33,6 @@ int MPID_Cancel_recv(MPID_Request * rreq)
"request 0x%08x already matched, unable to cancel", rreq->handle);
}
- fn_fail:
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_CANCEL_RECV);
- return mpi_errno;
+ MPIDI_FUNC_EXIT(MPID_STATE_MPID_CANCEL_RECV);
+ return MPI_SUCCESS;
}
diff --git a/src/mpid/ch3/src/mpid_cancel_send.c b/src/mpid/ch3/src/mpid_cancel_send.c
index e749b05..4772c8c 100644
--- a/src/mpid/ch3/src/mpid_cancel_send.c
+++ b/src/mpid/ch3/src/mpid_cancel_send.c
@@ -140,16 +140,6 @@ int MPID_Cancel_send(MPID_Request * sreq)
else
{
cancelled = FALSE;
- /* code in mpid_cancel_send */
-#ifdef ENABLE_COMM_OVERRIDES
- if (vc->comm_ops && vc->comm_ops->cancel_send)
- {
- mpi_errno = vc->comm_ops->cancel_send(vc, sreq);
- if (mpi_errno)
- goto fn_exit;
- }
- cancelled = MPIR_STATUS_GET_CANCEL_BIT(sreq->status);
-#endif
if (cancelled)
{
MPIR_STATUS_SET_CANCEL_BIT(sreq->status, TRUE);
-----------------------------------------------------------------------
Summary of changes:
src/mpid/ch3/include/mpidpre.h | 1 -
src/mpid/ch3/src/mpid_cancel_recv.c | 26 +++-----------------------
src/mpid/ch3/src/mpid_cancel_send.c | 10 ----------
3 files changed, 3 insertions(+), 34 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.2-9-g9443bde
by noreply@mpich.org 22 Jul '14
by noreply@mpich.org 22 Jul '14
22 Jul '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via 9443bde42e261f681e664114d460aa63134cc2a9 (commit)
via 35d4cb8dbc69c4435ca4eba8dc5c8be0de55972a (commit)
from 9bd821e448f445ad4a75f7f487144d11656937de (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/9443bde42e261f681e664114d460aa631…
commit 9443bde42e261f681e664114d460aa63134cc2a9
Author: Igor Ivanov <Igor.Ivanov(a)itseez.com>
Date: Wed Jul 16 19:13:16 2014 +0400
mpid: Add cancel_recv and cancel_send netmod calls
- Added cancel_recv and cancel_send netmod calls under ENABLE_COMM_OVERRIDES
- Extended MPIDI_CH3I_comm structure with netmode_comm field (this field can
store netmod context information related communicator as an example: mxm stores
mxm_mq_h value)
Change-Id: If89860d44840313bce6f7403190faec302c1bafc
Signed-off-by: Igor Ivanov <Igor.Ivanov(a)itseez.com>
diff --git a/src/mpid/ch3/include/mpidpre.h b/src/mpid/ch3/include/mpidpre.h
index 8c3a68e..5545984 100644
--- a/src/mpid/ch3/include/mpidpre.h
+++ b/src/mpid/ch3/include/mpidpre.h
@@ -176,6 +176,7 @@ typedef struct MPIDI_CH3I_comm
struct MPID_nem_barrier_vars *barrier_vars; /* shared memory variables used in barrier */
struct MPID_Comm *next; /* next pointer for list of communicators */
struct MPID_Comm *prev; /* prev pointer for list of communicators */
+ void *netmod_comm; /* netmod communicator context */
}
MPIDI_CH3I_comm_t;
diff --git a/src/mpid/ch3/src/mpid_cancel_recv.c b/src/mpid/ch3/src/mpid_cancel_recv.c
index 24a04f6..ce377cb 100644
--- a/src/mpid/ch3/src/mpid_cancel_recv.c
+++ b/src/mpid/ch3/src/mpid_cancel_recv.c
@@ -12,6 +12,8 @@
#define FCNAME MPIDI_QUOTE(FUNCNAME)
int MPID_Cancel_recv(MPID_Request * rreq)
{
+ int mpi_errno = MPI_SUCCESS;
+
MPIDI_STATE_DECL(MPID_STATE_MPID_CANCEL_RECV);
MPIDI_FUNC_ENTER(MPID_STATE_MPID_CANCEL_RECV);
@@ -20,7 +22,23 @@ int MPID_Cancel_recv(MPID_Request * rreq)
if (MPIDI_CH3U_Recvq_DP(rreq))
{
- MPIU_DBG_MSG_P(CH3_OTHER,VERBOSE,
+ /* code in cancel_recv */
+ /* FIXME: The vc is only needed to find which function to call*/
+ /* This is otherwise any_source ready */
+#ifdef ENABLE_COMM_OVERRIDES
+ {
+ MPIDI_VC_t *vc;
+ MPIU_Assert(rreq->dev.match.parts.rank != MPI_ANY_SOURCE);
+ MPIDI_Comm_get_vc_set_active(rreq->comm, rreq->dev.match.parts.rank, &vc);
+ if (vc->comm_ops && vc->comm_ops->cancel_recv)
+ {
+ mpi_errno = vc->comm_ops->cancel_recv(NULL, rreq);
+ if (mpi_errno)
+ goto fn_exit;
+ }
+ }
+#endif
+ MPIU_DBG_MSG_P(CH3_OTHER,VERBOSE,
"request 0x%08x cancelled", rreq->handle);
MPIR_STATUS_SET_CANCEL_BIT(rreq->status, TRUE);
MPIR_STATUS_SET_COUNT(rreq->status, 0);
@@ -33,6 +51,8 @@ int MPID_Cancel_recv(MPID_Request * rreq)
"request 0x%08x already matched, unable to cancel", rreq->handle);
}
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_CANCEL_RECV);
- return MPI_SUCCESS;
+ fn_fail:
+ fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MPID_CANCEL_RECV);
+ return mpi_errno;
}
diff --git a/src/mpid/ch3/src/mpid_cancel_send.c b/src/mpid/ch3/src/mpid_cancel_send.c
index 4772c8c..e749b05 100644
--- a/src/mpid/ch3/src/mpid_cancel_send.c
+++ b/src/mpid/ch3/src/mpid_cancel_send.c
@@ -140,6 +140,16 @@ int MPID_Cancel_send(MPID_Request * sreq)
else
{
cancelled = FALSE;
+ /* code in mpid_cancel_send */
+#ifdef ENABLE_COMM_OVERRIDES
+ if (vc->comm_ops && vc->comm_ops->cancel_send)
+ {
+ mpi_errno = vc->comm_ops->cancel_send(vc, sreq);
+ if (mpi_errno)
+ goto fn_exit;
+ }
+ cancelled = MPIR_STATUS_GET_CANCEL_BIT(sreq->status);
+#endif
if (cancelled)
{
MPIR_STATUS_SET_CANCEL_BIT(sreq->status, TRUE);
http://git.mpich.org/mpich.git/commitdiff/35d4cb8dbc69c4435ca4eba8dc5c8be0d…
commit 35d4cb8dbc69c4435ca4eba8dc5c8be0de55972a
Author: Igor Ivanov <Igor.Ivanov(a)itseez.com>
Date: Wed Jul 16 19:16:29 2014 +0400
netmod/mxm: Add mxm netmod
MXM is a MellanoX Messaging library which provides best of breed performance
and scalability for HPC applications.
Change-Id: Ic40e6ec49571f42506ca5707c770025a5509d565
Signed-off-by: Igor Ivanov <Igor.Ivanov(a)itseez.com>
diff --git a/src/mpi/errhan/errnames.txt b/src/mpi/errhan/errnames.txt
index 2641b5d..d5de9f9 100644
--- a/src/mpi/errhan/errnames.txt
+++ b/src/mpi/errhan/errnames.txt
@@ -719,6 +719,22 @@ is too big (> MPIU_SHMW_GHND_SZ)
**open %s:open failed - %s
**setenv:setenv failed
**putenv:putenv failed
+**mxm_config_read_opts: mxm_config_read_opts failed
+**mxm_config_read_opts %s:mxm_config_read_opts failed (%s)
+**mxm_init: mxm_init failed
+**mxm_init %s:mxm_init failed (%s)
+**mxm_set_am_handler: mxm_set_am_handler failed
+**mxm_set_am_handler %s:mxm_set_am_handler failed (%s)
+**mxm_mq_create: mxm_mq_create failed
+**mxm_mq_create %s:mxm_mq_create failed (%s)
+**mxm_ep_create: mxm_ep_create failed
+**mxm_ep_create %s:mxm_ep_create failed (%s)
+**mxm_ep_get_address: mxm_ep_get_address failed
+**mxm_ep_get_address %s:mxm_ep_get_address failed (%s)
+**mxm_ep_connect: mxm_ep_connect failed
+**mxm_ep_connect %s:mxm_ep_connect failed (%s)
+**mxm_ep_disconnect: mxm_ep_disconnect failed
+**mxm_ep_disconnect %s:mxm_ep_disconnect failed (%s)
**mx_close_endpoint: mx_close_endpoint failed
**mx_close_endpoint %s:mx_close_endpoint failed (%s)
**mx_finalize:mx_finalize failed
diff --git a/src/mpid/ch3/channels/nemesis/netmod/Makefile.mk b/src/mpid/ch3/channels/nemesis/netmod/Makefile.mk
index f7acca4..c85abf9 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/Makefile.mk
+++ b/src/mpid/ch3/channels/nemesis/netmod/Makefile.mk
@@ -2,6 +2,7 @@
## vim: set ft=automake :
##
## (C) 2012 by Argonne National Laboratory.
+## (C) 2014 by Mellanox Technologies, Inc.
## See COPYRIGHT in top-level directory.
##
@@ -12,3 +13,4 @@ include $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/newmad/Makefile.mk
include $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/scif/Makefile.mk
include $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/portals4/Makefile.mk
include $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/ib/Makefile.mk
+include $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/mxm/Makefile.mk
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/Makefile.mk b/src/mpid/ch3/channels/nemesis/netmod/mxm/Makefile.mk
new file mode 100644
index 0000000..597758b
--- /dev/null
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/Makefile.mk
@@ -0,0 +1,22 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2014 Mellanox Technologies, Inc.
+## See COPYRIGHT in top-level directory.
+##
+
+if BUILD_NEMESIS_NETMOD_MXM
+
+mpi_core_sources += \
+ src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_cancel.c \
+ src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_finalize.c \
+ src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c \
+ src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_poll.c \
+ src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_probe.c \
+ src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c
+
+noinst_HEADERS += \
+ src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_impl.h
+
+endif BUILD_NEMESIS_NETMOD_MXM
+
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_cancel.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_cancel.c
new file mode 100644
index 0000000..2a689b0
--- /dev/null
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_cancel.c
@@ -0,0 +1,70 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 Mellanox Technologies, Inc.
+ *
+ */
+
+
+
+#include "mxm_impl.h"
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_cancel_send
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_cancel_send(MPIDI_VC_t *vc, MPID_Request *req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ mxm_error_t ret = MXM_OK;
+
+ _dbg_mxm_output(5, "========> Canceling SEND req %p\n", req);
+
+ if (likely(!_mxm_req_test(&REQ_FIELD(req, mxm_req->item.base)))) {
+ ret = mxm_req_cancel_send(&REQ_FIELD(req, mxm_req->item.send));
+ if ((MXM_OK == ret) || (MXM_ERR_NO_PROGRESS == ret)) {
+ _mxm_req_wait(&REQ_FIELD(req, mxm_req->item.base));
+ if (MPIR_STATUS_GET_CANCEL_BIT(req->status)) {
+ (VC_FIELD(req->ch.vc, pending_sends)) -= 1;
+ }
+ } else {
+ mpi_errno = MPI_ERR_INTERN;
+ }
+ }
+
+ _dbg_mxm_out_req(req);
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail: ATTRIBUTE((unused))
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_cancel_recv
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_cancel_recv(MPIDI_VC_t *vc, MPID_Request *req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ mxm_error_t ret = MXM_OK;
+
+ _dbg_mxm_output(5, "========> Canceling RECV req %p\n", req);
+
+ if (likely(!_mxm_req_test(&REQ_FIELD(req, mxm_req->item.base)))) {
+ ret = mxm_req_cancel_recv(&REQ_FIELD(req, mxm_req->item.recv));
+ if ((MXM_OK == ret) || (MXM_ERR_NO_PROGRESS == ret)) {
+ _mxm_req_wait(&REQ_FIELD(req, mxm_req->item.base));
+ } else {
+ mpi_errno = MPI_ERR_INTERN;
+ }
+ }
+
+ _dbg_mxm_out_req(req);
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail: ATTRIBUTE((unused))
+ goto fn_exit;
+}
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_finalize.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_finalize.c
new file mode 100644
index 0000000..5c5a515
--- /dev/null
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_finalize.c
@@ -0,0 +1,11 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 Mellanox Technologies, Inc.
+ *
+ */
+
+
+
+#include "mxm_impl.h"
+
+
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_impl.h b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_impl.h
new file mode 100644
index 0000000..7aa8f2f
--- /dev/null
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_impl.h
@@ -0,0 +1,400 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 Mellanox Technologies, Inc.
+ *
+ */
+
+
+
+#ifndef MX_MODULE_IMPL_H
+#define MX_MODULE_IMPL_H
+#include "mpid_nem_impl.h"
+#include <mxm/api/mxm_api.h>
+
+
+#if !defined(MXM_VERSION) || (MXM_API < MXM_VERSION(3,0))
+#error "Unsupported MXM version, version 3.0 or above required"
+#endif
+
+
+int MPID_nem_mxm_init(MPIDI_PG_t *pg_p, int pg_rank, char **bc_val_p, int *val_max_sz_p);
+int MPID_nem_mxm_finalize(void);
+int MPID_nem_mxm_poll(int in_blocking_progress);
+int MPID_nem_mxm_get_business_card(int my_rank, char **bc_val_p, int *val_max_sz_p);
+int MPID_nem_mxm_connect_to_root(const char *business_card, MPIDI_VC_t *new_vc);
+int MPID_nem_mxm_vc_init(MPIDI_VC_t *vc);
+int MPID_nem_mxm_vc_destroy(MPIDI_VC_t *vc);
+int MPID_nem_mxm_vc_terminate(MPIDI_VC_t *vc);
+
+/* alternate interface */
+int MPID_nem_mxm_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPIDI_msg_sz_t hdr_sz,
+ void *data, MPIDI_msg_sz_t data_sz);
+int MPID_nem_mxm_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data,
+ MPIDI_msg_sz_t data_sz, MPID_Request **sreq_ptr);
+int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *header, MPIDI_msg_sz_t hdr_sz);
+
+/* direct interface */
+int MPID_nem_mxm_recv(MPIDI_VC_t *vc, MPID_Request *rreq);
+int MPID_nem_mxm_send(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype datatype, int rank, int tag,
+ MPID_Comm * comm, int context_offset, MPID_Request **sreq_p);
+int MPID_nem_mxm_ssend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype datatype, int rank, int tag,
+ MPID_Comm * comm, int context_offset,MPID_Request **sreq_p);
+int MPID_nem_mxm_isend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype datatype, int rank, int tag,
+ MPID_Comm * comm, int context_offset, MPID_Request **sreq_p);
+int MPID_nem_mxm_issend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype datatype, int rank, int tag,
+ MPID_Comm * comm, int context_offset,MPID_Request **sreq_p);
+int MPID_nem_mxm_cancel_send(MPIDI_VC_t *vc, MPID_Request *sreq);
+int MPID_nem_mxm_cancel_recv(MPIDI_VC_t *vc, MPID_Request *rreq);
+int MPID_nem_mxm_probe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, int context_offset, MPI_Status *status);
+int MPID_nem_mxm_iprobe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, int context_offset, int *flag, MPI_Status *status);
+int MPID_nem_mxm_improbe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, int context_offset, int *flag,
+ MPID_Request **message, MPI_Status *status);
+
+int MPID_nem_mxm_anysource_iprobe(int tag, MPID_Comm *comm, int context_offset, int *flag, MPI_Status *status);
+int MPID_nem_mxm_anysource_improbe(int tag, MPID_Comm *comm, int context_offset, int *flag,
+ MPID_Request **message,MPI_Status *status);
+
+/* active message callback */
+#define MXM_MPICH_HID_ADI_MSG 1
+void MPID_nem_mxm_get_adi_msg(mxm_conn_h conn, mxm_imm_t imm, void *data,
+ size_t length, size_t offset, int last);
+
+/* any source management */
+void MPID_nem_mxm_anysource_posted(MPID_Request *req);
+int MPID_nem_mxm_anysource_matched(MPID_Request *req);
+
+/* List type as queue
+ * Operations, initialization etc
+ */
+typedef struct list_item list_item_t;
+struct list_item {
+ list_item_t *next;
+};
+
+typedef struct list_head list_head_t;
+struct list_head {
+ list_item_t *head;
+ list_item_t **ptail;
+ int length;
+};
+
+static inline void list_init(list_head_t *list_head)
+{
+ list_head->head = NULL;
+ list_head->ptail = &list_head->head;
+ list_head->length = 0;
+}
+
+static inline int list_length(list_head_t *list_head)
+{
+ return list_head->length;
+}
+
+static inline int list_is_empty(list_head_t *list_head)
+{
+ return list_head->length == 0;
+}
+
+static inline void list_enqueue(list_head_t *list_head, list_item_t *list_item)
+{
+ *list_head->ptail = list_item;
+ list_head->ptail = &list_item->next;
+ ++list_head->length;
+}
+
+static inline list_item_t *list_dequeue(list_head_t *list_head)
+{
+ list_item_t *list_item;
+
+ if (list_is_empty(list_head)) {
+ return NULL;
+ }
+
+ list_item = list_head->head;
+ list_head->head = list_item->next;
+ --list_head->length;
+ if (list_head->length == 0) {
+ list_head->ptail = &list_head->head;
+ }
+ return list_item;
+}
+
+
+#define MXM_MPICH_MQ_ID 0x8888
+#define MXM_MPICH_MAX_ADDR_SIZE 512
+#define MXM_MPICH_ENDPOINT_KEY "endpoint_id"
+#define MXM_MPICH_MAX_REQ 100
+#define MXM_MPICH_MAX_IOV 2
+
+
+/* The vc provides a generic buffer in which network modules can store
+ private fields This removes all dependencies from the VC structure
+ on the network module, facilitating dynamic module loading.
+ */
+typedef struct {
+ mxm_conn_h mxm_conn;
+ list_head_t free_queue;
+} MPID_nem_mxm_ep_t;
+
+typedef struct
+{
+ MPIDI_VC_t *ctx;
+ MPID_nem_mxm_ep_t *mxm_ep;
+ int pending_sends;
+} MPID_nem_mxm_vc_area;
+
+/* direct macro to private fields in VC */
+#define VC_FIELD(vcp, field) (((MPID_nem_mxm_vc_area *)vcp->ch.netmod_area.padding)->field)
+#define VC_BASE(vcp) ((MPID_nem_mxm_vc_area *)vcp->ch.netmod_area.padding)
+
+/* The req provides a generic buffer in which network modules can store
+ private fields This removes all dependencies from the req structure
+ on the network module, facilitating dynamic module loading. */
+typedef struct {
+ list_item_t queue;
+ union {
+ mxm_req_base_t base;
+ mxm_send_req_t send;
+ mxm_recv_req_t recv;
+ } item;
+} MPID_nem_mxm_req_t;
+
+typedef struct
+{
+ MPID_Request *ctx;
+ MPID_nem_mxm_req_t *mxm_req;
+ mxm_req_buffer_t *iov_buf;
+ int iov_count;
+ mxm_req_buffer_t tmp_buf[MXM_MPICH_MAX_IOV];
+} MPID_nem_mxm_req_area;
+
+/* direct macro to private fields in REQ */
+#define REQ_FIELD(reqp, field) (((MPID_nem_mxm_req_area *)((reqp)->ch.netmod_area.padding))->field)
+#define REQ_BASE(reqp) ((MPID_nem_mxm_req_area *)((reqp)->ch.netmod_area.padding))
+
+typedef struct MPID_nem_mxm_module_t {
+ char *runtime_version;
+ char *compiletime_version;
+ mxm_context_opts_t *mxm_ctx_opts;
+ mxm_ep_opts_t *mxm_ep_opts;
+ mxm_h mxm_context;
+ mxm_mq_h mxm_mq;
+ mxm_ep_h mxm_ep;
+ char mxm_ep_addr[MXM_MPICH_MAX_ADDR_SIZE];
+ size_t mxm_ep_addr_size;
+ int mxm_rank;
+ int mxm_np;
+ MPID_nem_mxm_ep_t *endpoint;
+ list_head_t free_queue;
+ struct {
+ int bulk_connect; /* use bulk connect */
+ int bulk_disconnect; /* use bulk disconnect */
+ } conf;
+} MPID_nem_mxm_module_t;
+
+extern MPID_nem_mxm_module_t *mxm_obj;
+
+#define container_of(ptr, type, member) (type *)( (char *)(ptr) - offsetof(type,member) )
+#define list_dequeue_mxm_req(head) \
+ container_of(list_dequeue(head), MPID_nem_mxm_req_t, queue)
+static inline void list_grow_mxm_req(list_head_t *list_head)
+{
+ MPID_nem_mxm_req_t *mxm_req = NULL;
+ int count = MXM_MPICH_MAX_REQ;
+
+ while (count--) {
+ mxm_req = (MPID_nem_mxm_req_t *)MPIU_Malloc(sizeof(MPID_nem_mxm_req_t));
+ list_enqueue(list_head, &mxm_req->queue);
+ }
+}
+
+static inline void _mxm_to_mpi_status(mxm_error_t mxm_error, MPI_Status *mpi_status)
+{
+ switch (mxm_error) {
+ case MXM_OK:
+ mpi_status->MPI_ERROR = MPI_SUCCESS;
+ break;
+ case MXM_ERR_CANCELED:
+ MPIR_STATUS_SET_CANCEL_BIT(*mpi_status, TRUE);
+ mpi_status->MPI_ERROR = MPI_SUCCESS;
+ break;
+ case MXM_ERR_MESSAGE_TRUNCATED:
+ mpi_status->MPI_ERROR = MPI_ERR_TRUNCATE;
+ break;
+ default:
+ mpi_status->MPI_ERROR = MPI_ERR_INTERN;
+ break;
+ }
+}
+
+static inline int _mxm_req_test(mxm_req_base_t *req)
+{
+ return req->state == MXM_REQ_COMPLETED;
+}
+
+static inline void _mxm_progress_cb(void *user_data)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIDI_CH3_Progress_poke();
+ MPIU_Assert(mpi_errno == MPI_SUCCESS);
+}
+
+static inline void _mxm_req_wait(mxm_req_base_t *req)
+{
+ mxm_wait_t mxm_wreq;
+
+ mxm_wreq.req = req;
+ mxm_wreq.state = MXM_REQ_COMPLETED;
+ mxm_wreq.progress_cb = _mxm_progress_cb;
+ mxm_wreq.progress_arg = NULL;
+
+ mxm_wait(&mxm_wreq);
+}
+
+/*
+ * Tag management section
+ */
+static inline mxm_tag_t _mxm_tag_mpi2mxm(int mpi_tag, MPIR_Context_id_t context_id)
+{
+ mxm_tag_t mxm_tag;
+
+ mxm_tag = (mpi_tag == MPI_ANY_TAG ? 0 : mpi_tag) & 0x7fffffff;
+ mxm_tag |= (context_id << 31) & 0x80000000;
+
+ return mxm_tag;
+}
+
+static inline int _mxm_tag_mxm2mpi(mxm_tag_t mxm_tag)
+{
+ return (mxm_tag & 0x7fffffff);
+}
+
+static inline mxm_tag_t _mxm_tag_mask(int mpi_tag)
+{
+ return (mpi_tag == MPI_ANY_TAG ? 0x80000000U : 0xffffffffU);
+}
+
+/*
+ * Debugging section
+ */
+
+#define MXM_DEBUG 0
+#define MXM_DEBUG_PREFIX "MXM"
+
+
+static inline void _dbg_mxm_out(int level,
+ FILE* output_id,
+ int cr,
+ const char* file_name,
+ const char* func_name,
+ int line_no,
+ const char* format, ...)
+{
+ va_list args;
+ char str[200];
+ int ret;
+
+ if (level < MXM_DEBUG) {
+ output_id = ( output_id ? output_id : stderr);
+
+ va_start(args, format);
+
+ ret = vsnprintf(str, sizeof(str), format, args);
+ assert(-1 != ret);
+
+ if (cr) {
+// ret = fprintf(output_id, "[%s #%d] %s %s:%s:%d", MXM_DEBUG_PREFIX, MPIR_Process.comm_world->rank, str, file_name, func_name, line_no);
+ ret = fprintf(output_id, "[%s #%d] %s", MXM_DEBUG_PREFIX, MPIR_Process.comm_world->rank, str);
+ } else {
+ ret = fprintf(output_id, "%s", str);
+ }
+ assert(-1 != ret);
+
+ va_end(args);
+ }
+}
+
+static void _dbg_mxm_hexdump(void *ptr, int buflen)
+{
+ unsigned char *buf = (unsigned char *)ptr;
+ char *str = NULL;
+ int len = 0;
+ int cur_len = 0;
+ int i, j;
+
+ if (!ptr)
+ return ;
+
+ len = 80 * ( buflen / 16 + 1);
+ str = (char *)MPIU_Malloc(len);
+ for (i = 0; i < buflen; i += 16)
+ {
+ cur_len += MPIU_Snprintf(str + cur_len, len - cur_len, "%06x: ", i);
+ for (j = 0; j < 16; j++)
+ if (i + j < buflen)
+ cur_len += MPIU_Snprintf(str + cur_len, len - cur_len, "%02x ", buf[i + j]);
+ else
+ cur_len += MPIU_Snprintf(str + cur_len, len - cur_len, " ");
+ cur_len += MPIU_Snprintf(str + cur_len, len - cur_len, " ");
+ for (j = 0; j < 16; j++)
+ if (i + j < buflen)
+ cur_len += MPIU_Snprintf(str + cur_len, len - cur_len, "%c", isprint(buf[i + j]) ? buf[i + j] : '.');
+ cur_len += MPIU_Snprintf(str + cur_len, len - cur_len, "\n");
+ }
+ _dbg_mxm_out(8, NULL, 1, NULL, NULL, -1, "%s", str);
+ MPIU_Free(str);
+}
+
+static inline char *_tag_val_to_str(int tag, char *out, int max)
+{
+ if (tag == MPI_ANY_TAG) {
+ MPIU_Strncpy(out, "MPI_ANY_TAG", max);
+ }
+ else {
+ MPIU_Snprintf(out, max, "%d", tag);
+ }
+ return out;
+}
+
+static inline char *_rank_val_to_str(int rank, char *out, int max)
+{
+ if (rank == MPI_ANY_SOURCE) {
+ MPIU_Strncpy(out, "MPI_ANY_SOURCE", max);
+ }
+ else {
+ MPIU_Snprintf(out, max, "%d", rank);
+ }
+ return out;
+}
+
+static inline void _dbg_mxm_req(MPID_Request *req)
+{
+ FILE *stream = stderr;
+ char tag_buf[128];
+ char rank_buf[128];
+
+ if (req) {
+ _dbg_mxm_out(10, NULL, 1, NULL, NULL, -1,
+ "[ctx=%#x rank=%d] req=%p ctx=%#x rank=%s tag=%s kind=%d\n",
+ MPIR_Process.comm_world->context_id, MPIR_Process.comm_world->rank,
+ req, req->dev.match.parts.context_id,
+ _rank_val_to_str(req->dev.match.parts.rank, rank_buf, sizeof(rank_buf)),
+ _tag_val_to_str(req->dev.match.parts.tag, tag_buf, sizeof(tag_buf)),
+ req->kind);
+ }
+}
+
+
+#if defined(MXM_DEBUG) && (MXM_DEBUG > 0)
+#define _dbg_mxm_out_buf(ptr, len) _dbg_mxm_hexdump(ptr, len)
+#define _dbg_mxm_out_req(req) _dbg_mxm_req(req)
+#define _dbg_mxm_output(level, ...) _dbg_mxm_out(level, NULL, 1, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
+#else
+#define _dbg_mxm_out_buf(ptr, len) ((void)0)
+#define _dbg_mxm_out_req(req) ((void)0)
+#define _dbg_mxm_output(level, ...) ((void)0)
+#endif
+
+#endif
+
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c
new file mode 100644
index 0000000..58c4489
--- /dev/null
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c
@@ -0,0 +1,551 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 Mellanox Technologies, Inc.
+ *
+ */
+
+
+#ifdef USE_PMI2_API
+#include "pmi2.h"
+#else
+#include "pmi.h"
+#endif
+
+#include "mpid_nem_impl.h"
+#include "mxm_impl.h"
+
+MPID_nem_netmod_funcs_t MPIDI_nem_mxm_funcs = {
+ MPID_nem_mxm_init,
+ MPID_nem_mxm_finalize,
+#ifdef ENABLE_CHECKPOINTING
+ NULL,
+ NULL,
+ NULL,
+#endif
+ MPID_nem_mxm_poll,
+ MPID_nem_mxm_get_business_card,
+ MPID_nem_mxm_connect_to_root,
+ MPID_nem_mxm_vc_init,
+ MPID_nem_mxm_vc_destroy,
+ MPID_nem_mxm_vc_terminate,
+ MPID_nem_mxm_anysource_iprobe,
+ MPID_nem_mxm_anysource_improbe
+};
+
+static MPIDI_Comm_ops_t comm_ops = {
+ MPID_nem_mxm_recv, /* recv_posted */
+
+ MPID_nem_mxm_send, /* send */
+ MPID_nem_mxm_send, /* rsend */
+ MPID_nem_mxm_ssend, /* ssend */
+ MPID_nem_mxm_isend, /* isend */
+ MPID_nem_mxm_isend, /* irsend */
+ MPID_nem_mxm_issend, /* issend */
+
+ NULL, /* send_init */
+ NULL, /* bsend_init */
+ NULL, /* rsend_init */
+ NULL, /* ssend_init */
+ NULL, /* startall */
+
+ MPID_nem_mxm_cancel_send,/* cancel_send */
+ MPID_nem_mxm_cancel_recv, /* cancel_recv */
+
+ MPID_nem_mxm_probe, /* probe */
+ MPID_nem_mxm_iprobe, /* iprobe */
+ MPID_nem_mxm_improbe /* improbe */
+};
+
+
+static MPID_nem_mxm_module_t _mxm_obj;
+MPID_nem_mxm_module_t *mxm_obj;
+
+static int _mxm_init(int rank, int size);
+static int _mxm_fini(void);
+static int _mxm_connect(MPID_nem_mxm_ep_t *ep, const char *business_card, MPID_nem_mxm_vc_area *vc_area);
+static int _mxm_disconnect(MPID_nem_mxm_ep_t *ep);
+static int _mxm_add_comm(MPID_Comm *comm, void *param);
+static int _mxm_del_comm(MPID_Comm *comm, void *param);
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_post_init
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int
+MPID_nem_mxm_post_init(void)
+{
+ int mpi_errno = MPI_SUCCESS ;
+
+#if MXM_API >= MXM_VERSION(3,1)
+ if (_mxm_obj.conf.bulk_connect) {
+ mxm_ep_wireup(_mxm_obj.mxm_ep);
+ }
+#endif
+
+fn_exit:
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_init
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_init(MPIDI_PG_t *pg_p, int pg_rank, char **bc_val_p, int *val_max_sz_p)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIDI_STATE_DECL(MPID_STATE_MXM_INIT);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_INIT);
+
+ /* first make sure that our private fields in the vc and req fit into the area provided */
+ MPIU_Assert(sizeof(MPID_nem_mxm_vc_area) <= MPID_NEM_VC_NETMOD_AREA_LEN);
+ MPIU_Assert(sizeof(MPID_nem_mxm_req_area) <= MPID_NEM_REQ_NETMOD_AREA_LEN);
+
+ mpi_errno = _mxm_init(pg_rank, pg_p->size);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+ mpi_errno = MPID_nem_mxm_get_business_card(pg_rank, bc_val_p, val_max_sz_p);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDI_CH3I_Register_anysource_notification(MPID_nem_mxm_anysource_posted, MPID_nem_mxm_anysource_matched);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+ mpi_errno = MPID_nem_register_initcomp_cb(MPID_nem_mxm_post_init);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDI_CH3U_Comm_register_create_hook(_mxm_add_comm, NULL);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDI_CH3U_Comm_register_destroy_hook(_mxm_del_comm, NULL);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_INIT);
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_finalize
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_finalize(void)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIDI_STATE_DECL(MPID_STATE_MXM_FINALIZE);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_FINALIZE);
+
+ mpi_errno = _mxm_fini();
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_FINALIZE);
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_get_business_card
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_get_business_card(int my_rank, char **bc_val_p, int *val_max_sz_p)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int str_errno = MPIU_STR_SUCCESS;
+
+ MPIDI_STATE_DECL(MPID_STATE_MXM_GET_BUSINESS_CARD);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_GET_BUSINESS_CARD);
+
+ str_errno = MPIU_Str_add_binary_arg(bc_val_p, val_max_sz_p, MXM_MPICH_ENDPOINT_KEY,
+ _mxm_obj.mxm_ep_addr, _mxm_obj.mxm_ep_addr_size);
+ if (str_errno) {
+ MPIU_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIU_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
+ }
+
+fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_GET_BUSINESS_CARD);
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_connect_to_root
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_connect_to_root(const char *business_card, MPIDI_VC_t *new_vc)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIDI_STATE_DECL(MPID_STATE_MXM_CONNECT_TO_ROOT);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_CONNECT_TO_ROOT);
+
+ MPIU_ERR_SETFATAL(mpi_errno, MPI_ERR_OTHER, "**notimpl");
+
+fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_CONNECT_TO_ROOT);
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_vc_init
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_vc_init(MPIDI_VC_t *vc)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH3I_VC *vc_ch = &vc->ch;
+
+ MPIDI_STATE_DECL(MPID_STATE_MXM_VC_INIT);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_VC_INIT);
+
+ /* local connection is used for any source communication */
+ MPIU_Assert(MPID_nem_mem_region.rank != vc->lpid);
+ MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE,
+ (MPIU_DBG_FDEST,
+ "[%i]=== connecting to %i \n",
+ MPID_nem_mem_region.rank, vc->lpid));
+ {
+ char *business_card;
+ int val_max_sz;
+#ifdef USE_PMI2_API
+ val_max_sz = PMI2_MAX_VALLEN;
+#else
+ mpi_errno = PMI_KVS_Get_value_length_max(&val_max_sz);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+#endif
+
+ business_card = (char *)MPIU_Malloc(val_max_sz);
+ mpi_errno = vc->pg->getConnInfo(vc->pg_rank, business_card, val_max_sz, vc->pg);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+ VC_FIELD(vc, ctx) = vc;
+ VC_FIELD(vc, mxm_ep) = &_mxm_obj.endpoint[vc->pg_rank];
+ mpi_errno = _mxm_connect(&_mxm_obj.endpoint[vc->pg_rank], business_card, VC_BASE(vc));
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+ MPIU_Free(business_card);
+ }
+
+ MPIDI_CHANGE_VC_STATE(vc, ACTIVE);
+
+ VC_FIELD(vc, pending_sends) = 0;
+
+ vc->rndvSend_fn = NULL;
+ vc->rndvRecv_fn = NULL;
+ vc->sendNoncontig_fn = MPID_nem_mxm_SendNoncontig;
+ vc->comm_ops = &comm_ops;
+
+ vc_ch->iStartContigMsg = MPID_nem_mxm_iStartContigMsg;
+ vc_ch->iSendContig = MPID_nem_mxm_iSendContig;
+
+fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_VC_INIT);
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_vc_destroy
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_vc_destroy(MPIDI_VC_t *vc)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIDI_STATE_DECL(MPID_STATE_MXM_VC_DESTROY);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_VC_DESTROY);
+
+ /* Do nothing because
+ * finalize is called before vc destroy as result it is not possible
+ * to destroy endpoint here
+ */
+#if 0
+ if (VC_FIELD(vc, ctx) == vc) {
+ mpi_errno = _mxm_disconnect(VC_FIELD(vc, mxm_ep));
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+ }
+#endif
+
+fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_VC_DESTROY);
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_vc_terminate
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_vc_terminate(MPIDI_VC_t *vc)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIDI_STATE_DECL(MPID_STATE_MXM_VC_TERMINATE);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_VC_TERMINATE);
+
+ while((VC_FIELD(vc, pending_sends)) > 0)
+ MPID_nem_mxm_poll(FALSE);
+
+ mpi_errno = MPIDI_CH3U_Handle_connection(vc, MPIDI_VC_EVENT_TERMINATED);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_VC_TERMINATE);
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+static int _mxm_init(int rank, int size)
+{
+ int mpi_errno = MPI_SUCCESS;
+ mxm_error_t ret = MXM_OK;
+ unsigned long cur_ver;
+
+ cur_ver = mxm_get_version();
+ if (cur_ver != MXM_API) {
+ MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE,
+ (MPIU_DBG_FDEST,
+ "WARNING: MPICH was compiled with MXM version %d.%d but version %ld.%ld detected.",
+ MXM_VERNO_MAJOR,
+ MXM_VERNO_MINOR,
+ (cur_ver >> MXM_MAJOR_BIT) & 0xff,
+ (cur_ver >> MXM_MINOR_BIT) & 0xff));
+ }
+
+ _mxm_obj.compiletime_version = MXM_VERNO_STRING;
+#if MXM_API >= MXM_VERSION(3,0)
+ _mxm_obj.runtime_version = MPIU_Strdup(mxm_get_version_string());
+#else
+ _mxm_obj.runtime_version = MPIU_Malloc(sizeof(MXM_VERNO_STRING) + 10);
+ snprintf(_mxm_obj.runtime_version, (sizeof(MXM_VERNO_STRING) + 9),
+ "%ld.%ld",
+ (cur_ver >> MXM_MAJOR_BIT) & 0xff, (cur_ver >> MXM_MINOR_BIT) & 0xff);
+#endif
+
+ if (cur_ver < MXM_VERSION(3,2)) {
+ _mxm_obj.conf.bulk_connect = 0;
+ _mxm_obj.conf.bulk_disconnect = 0;
+ } else {
+ _mxm_obj.conf.bulk_connect = 1;
+ _mxm_obj.conf.bulk_disconnect = 1;
+ }
+
+ ret = mxm_config_read_opts(&_mxm_obj.mxm_ctx_opts, &_mxm_obj.mxm_ep_opts, "MPICH2", NULL, 0);
+ MPIU_ERR_CHKANDJUMP1(ret != MXM_OK,
+ mpi_errno, MPI_ERR_OTHER,
+ "**mxm_config_read_opts",
+ "**mxm_config_read_opts %s", mxm_error_string(ret));
+
+ ret = mxm_init(_mxm_obj.mxm_ctx_opts, &_mxm_obj.mxm_context);
+ MPIU_ERR_CHKANDJUMP1(ret != MXM_OK,
+ mpi_errno, MPI_ERR_OTHER,
+ "**mxm_init",
+ "**mxm_init %s", mxm_error_string(ret));
+
+ ret = mxm_set_am_handler(_mxm_obj.mxm_context, MXM_MPICH_HID_ADI_MSG, MPID_nem_mxm_get_adi_msg, MXM_AM_FLAG_THREAD_SAFE);
+ MPIU_ERR_CHKANDJUMP1(ret != MXM_OK,
+ mpi_errno, MPI_ERR_OTHER,
+ "**mxm_set_am_handler",
+ "**mxm_set_am_handler %s", mxm_error_string(ret));
+
+ ret = mxm_mq_create(_mxm_obj.mxm_context, MXM_MPICH_MQ_ID, &_mxm_obj.mxm_mq);
+ MPIU_ERR_CHKANDJUMP1(ret != MXM_OK,
+ mpi_errno, MPI_ERR_OTHER,
+ "**mxm_mq_create",
+ "**mxm_mq_create %s", mxm_error_string(ret));
+
+ ret = mxm_ep_create(_mxm_obj.mxm_context, _mxm_obj.mxm_ep_opts, &_mxm_obj.mxm_ep);
+ MPIU_ERR_CHKANDJUMP1(ret != MXM_OK,
+ mpi_errno, MPI_ERR_OTHER,
+ "**mxm_ep_create",
+ "**mxm_ep_create %s", mxm_error_string(ret));
+
+ _mxm_obj.mxm_ep_addr_size = MXM_MPICH_MAX_ADDR_SIZE;
+ ret = mxm_ep_get_address(_mxm_obj.mxm_ep, &_mxm_obj.mxm_ep_addr, &_mxm_obj.mxm_ep_addr_size);
+ MPIU_ERR_CHKANDJUMP1(ret != MXM_OK,
+ mpi_errno, MPI_ERR_OTHER,
+ "**mxm_ep_get_address",
+ "**mxm_ep_get_address %s", mxm_error_string(ret));
+
+ _mxm_obj.mxm_rank = rank;
+ _mxm_obj.mxm_np = size;
+ _mxm_obj.endpoint = (MPID_nem_mxm_ep_t *)MPIU_Malloc(_mxm_obj.mxm_np * sizeof(MPID_nem_mxm_ep_t));
+ memset(_mxm_obj.endpoint, 0, _mxm_obj.mxm_np * sizeof(MPID_nem_mxm_ep_t));
+
+ list_init(&_mxm_obj.free_queue);
+ list_grow_mxm_req(&_mxm_obj.free_queue);
+ MPIU_Assert(list_length(&_mxm_obj.free_queue) == MXM_MPICH_MAX_REQ);
+
+ mxm_obj = &_mxm_obj;
+
+fn_exit:
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+static int _mxm_fini(void)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ if (_mxm_obj.mxm_context) {
+
+ while (!list_is_empty(&_mxm_obj.free_queue)) {
+ MPIU_Free(list_dequeue(&_mxm_obj.free_queue));
+ }
+
+#if MXM_API >= MXM_VERSION(3,1)
+ if (_mxm_obj.conf.bulk_disconnect) {
+ mxm_ep_powerdown(_mxm_obj.mxm_ep);
+ }
+#endif
+
+ while (_mxm_obj.mxm_np) {
+ _mxm_disconnect(&(_mxm_obj.endpoint[--_mxm_obj.mxm_np]));
+ }
+
+ if (_mxm_obj.endpoint)
+ MPIU_Free(_mxm_obj.endpoint);
+
+ if (_mxm_obj.mxm_ep)
+ mxm_ep_destroy(_mxm_obj.mxm_ep);
+
+ if (_mxm_obj.mxm_mq)
+ mxm_mq_destroy(_mxm_obj.mxm_mq);
+
+ mxm_cleanup(_mxm_obj.mxm_context);
+ _mxm_obj.mxm_context = NULL;
+
+ mxm_config_free_ep_opts(_mxm_obj.mxm_ep_opts);
+ mxm_config_free_context_opts(_mxm_obj.mxm_ctx_opts);
+
+ MPIU_Free(_mxm_obj.runtime_version);
+ }
+
+fn_exit:
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+static int _mxm_connect(MPID_nem_mxm_ep_t *ep, const char *business_card, MPID_nem_mxm_vc_area *vc_area)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int str_errno = MPIU_STR_SUCCESS;
+ mxm_error_t ret = MXM_OK;
+ char mxm_ep_addr[MXM_MPICH_MAX_ADDR_SIZE];
+ int len = 0;
+
+ str_errno = MPIU_Str_get_binary_arg(business_card, MXM_MPICH_ENDPOINT_KEY, mxm_ep_addr, sizeof(mxm_ep_addr), &len);
+ MPIU_ERR_CHKANDJUMP(str_errno, mpi_errno, MPI_ERR_OTHER, "**buscard");
+
+ ret = mxm_ep_connect(_mxm_obj.mxm_ep, mxm_ep_addr, &ep->mxm_conn);
+ MPIU_ERR_CHKANDJUMP1(ret != MXM_OK,
+ mpi_errno, MPI_ERR_OTHER,
+ "**mxm_ep_connect",
+ "**mxm_ep_connect %s", mxm_error_string(ret));
+
+ mxm_conn_ctx_set(ep->mxm_conn, vc_area->ctx);
+
+ list_init(&ep->free_queue);
+ list_grow_mxm_req(&ep->free_queue);
+ MPIU_Assert(list_length(&ep->free_queue) == MXM_MPICH_MAX_REQ);
+
+fn_exit:
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+static int _mxm_disconnect(MPID_nem_mxm_ep_t *ep)
+{
+ int mpi_errno = MPI_SUCCESS;
+ mxm_error_t ret = MXM_OK;
+
+ MPIU_Assert(ep);
+
+ if (ep->mxm_conn) {
+ ret = mxm_ep_disconnect(ep->mxm_conn);
+ MPIU_ERR_CHKANDJUMP1(ret != MXM_OK,
+ mpi_errno, MPI_ERR_OTHER,
+ "**mxm_ep_disconnect",
+ "**mxm_ep_disconnect %s", mxm_error_string(ret));
+
+ while (!list_is_empty(&ep->free_queue)) {
+ MPIU_Free(list_dequeue(&ep->free_queue));
+ }
+ }
+
+fn_exit:
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+static int _mxm_add_comm(MPID_Comm *comm, void *param)
+{
+ int mpi_errno = MPI_SUCCESS;
+ mxm_error_t ret = MXM_OK;
+ mxm_mq_h mxm_mq;
+
+ _dbg_mxm_output(6, "Add COMM comm %p (context %d rank %d) \n",
+ comm, comm->context_id, comm->rank);
+
+ ret = mxm_mq_create(_mxm_obj.mxm_context, comm->context_id, &mxm_mq);
+ MPIU_ERR_CHKANDJUMP1(ret != MXM_OK,
+ mpi_errno, MPI_ERR_OTHER,
+ "**mxm_mq_create",
+ "**mxm_mq_create %s", mxm_error_string(ret));
+
+ comm->ch.netmod_comm = (void *)mxm_mq;
+
+fn_exit:
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+static int _mxm_del_comm(MPID_Comm *comm, void *param)
+{
+ int mpi_errno = MPI_SUCCESS;
+ mxm_mq_h mxm_mq = (mxm_mq_h)comm->ch.netmod_comm;
+
+ _dbg_mxm_output(6, "Del COMM comm %p (context %d rank %d) \n",
+ comm, comm->context_id, comm->rank);
+
+ if (mxm_mq)
+ mxm_mq_destroy(mxm_mq);
+
+ comm->ch.netmod_comm = NULL;
+
+fn_exit:
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_poll.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_poll.c
new file mode 100644
index 0000000..6ce5f8e
--- /dev/null
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_poll.c
@@ -0,0 +1,436 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 Mellanox Technologies, Inc.
+ *
+ */
+
+
+
+#include "mxm_impl.h"
+
+static int _mxm_poll(void);
+static int _mxm_handle_rreq(MPID_Request *req);
+static void _mxm_recv_completion_cb(void *context);
+static int _mxm_irecv(MPID_nem_mxm_ep_t *ep, MPID_nem_mxm_req_area *req, int id, mxm_mq_h mxm_mq, mxm_tag_t mxm_tag);
+static int _mxm_process_rdtype(MPID_Request **rreq_p, MPI_Datatype datatype, MPID_Datatype *dt_ptr, MPIDI_msg_sz_t data_sz,
+ const void *buf, int count,
+ mxm_req_buffer_t **iov_buf, int *iov_count);
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_poll
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_poll(int in_blocking_progress)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIDI_STATE_DECL(MPID_STATE_MXM_POLL);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_POLL);
+
+ mpi_errno = _mxm_poll();
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_POLL);
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+
+static int _mxm_poll(void)
+{
+ int mpi_errno = MPI_SUCCESS;
+ mxm_error_t ret = MXM_OK;
+
+ ret = mxm_progress(mxm_obj->mxm_context);
+ if ((MXM_OK != ret) && (MXM_ERR_NO_PROGRESS != ret) ) {
+ mpi_errno = MPI_ERR_OTHER;
+ goto fn_fail;
+ }
+
+fn_exit:
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_get_adi_msg
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+void MPID_nem_mxm_get_adi_msg(mxm_conn_h conn, mxm_imm_t imm, void *data,
+ size_t length, size_t offset, int last)
+{
+ MPIDI_VC_t *vc = NULL;
+
+ MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "MPID_nem_mxm_get_adi_msg");
+
+ _dbg_mxm_output(5, "========> Getting ADI msg (data_size %d) \n", length);
+
+ vc = mxm_conn_ctx_get(conn);
+
+ MPID_nem_handle_pkt(vc, data, (MPIDI_msg_sz_t)(length));
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_anysource_posted
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+void MPID_nem_mxm_anysource_posted(MPID_Request *req)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_POSTED);
+ MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_POSTED);
+
+ _dbg_mxm_output(5, "Any Source ========> Posting req %p \n", req);
+
+ mpi_errno = MPID_nem_mxm_recv(NULL, req);
+ MPIU_Assert(mpi_errno == MPI_SUCCESS);
+
+ _dbg_mxm_out_req(req);
+
+ MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_POSTED);
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_anysource_matched
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_anysource_matched(MPID_Request *req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ mxm_error_t ret = MXM_OK;
+ int matched = FALSE;
+
+ /* This function is called when an anysource request in the posted
+ receive queue is matched and dequeued see MPIDI_POSTED_RECV_DEQUEUE_HOOK().
+ It returns 0(FALSE) if the req was not matched by mxm and non-zero(TRUE)
+ otherwise.
+ This happens
+ when the channel supports shared-memory and network communication
+ with a network capable of matching, and the same request is matched
+ by the network and, e.g., shared-memory.
+ */
+ MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_MATCHED);
+ MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_MATCHED);
+
+ _dbg_mxm_output(5, "Any Source ========> Matching req %p \n", req);
+
+ ret = mxm_req_cancel_recv(&REQ_FIELD(req, mxm_req->item.recv));
+ if ((MXM_OK == ret) || (MXM_ERR_NO_PROGRESS == ret)) {
+ MPID_Segment_free(req->dev.segment_ptr);
+ } else {
+ _mxm_req_wait(&REQ_FIELD(req, mxm_req->item.base));
+ matched = TRUE;
+ }
+
+ _dbg_mxm_out_req(req);
+
+ MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_MATCHED);
+ return matched;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_recv
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_recv(MPIDI_VC_t *vc, MPID_Request *rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ mxm_error_t ret = MXM_OK;
+ mxm_recv_req_t *mxm_rreq;
+
+ MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_RECV);
+ MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_RECV);
+
+ MPIU_Assert(rreq);
+ MPIU_Assert(((rreq->dev.match.parts.rank == MPI_ANY_SOURCE) && (vc == NULL)) || (vc && !vc->ch.is_local));
+
+ {
+ MPIR_Rank_t source = rreq->dev.match.parts.rank;
+ MPIR_Context_id_t context_id = rreq->dev.match.parts.context_id;
+ int tag = rreq->dev.match.parts.tag;
+ int ret;
+ MPIDI_msg_sz_t data_sz;
+ int dt_contig;
+ MPI_Aint dt_true_lb;
+ MPID_Datatype *dt_ptr;
+
+ MPIU_Assert((rreq->kind == MPID_REQUEST_RECV) || (rreq->kind == MPID_PREQUEST_RECV));
+ MPIDI_Datatype_get_info(rreq->dev.user_count, rreq->dev.datatype, dt_contig, data_sz, dt_ptr,dt_true_lb);
+ rreq->dev.OnDataAvail = NULL;
+ rreq->dev.tmpbuf = NULL;
+ rreq->ch.vc = vc;
+
+ _dbg_mxm_output(5, "Recv ========> Getting USER msg for req %p (context %d rank %d tag %d size %d) \n",
+ rreq, context_id, source, tag, data_sz);
+
+ REQ_FIELD(rreq, ctx) = rreq;
+ REQ_FIELD(rreq, iov_buf) = REQ_FIELD(rreq, tmp_buf);
+ REQ_FIELD(rreq, iov_count) = 0;
+ REQ_FIELD(rreq, iov_buf)[0].ptr = NULL;
+ REQ_FIELD(rreq, iov_buf)[0].length = 0;
+
+ if (dt_contig) {
+ REQ_FIELD(rreq, iov_count) = 1;
+ REQ_FIELD(rreq, iov_buf)[0].ptr = (char *)(rreq->dev.user_buf) + dt_true_lb;
+ REQ_FIELD(rreq, iov_buf)[0].length = data_sz;
+ } else {
+ mpi_errno = _mxm_process_rdtype(&rreq, rreq->dev.datatype, dt_ptr, data_sz,
+ rreq->dev.user_buf, rreq->dev.user_count,
+ &REQ_FIELD(rreq, iov_buf), &REQ_FIELD(rreq, iov_count));
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+ }
+
+ mpi_errno = _mxm_irecv((vc ? VC_FIELD(vc, mxm_ep) : NULL), REQ_BASE(rreq),
+ tag, (rreq->comm ? (mxm_mq_h)rreq->comm->ch.netmod_comm : mxm_obj->mxm_mq), _mxm_tag_mpi2mxm(tag, context_id));
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+ }
+
+ if (vc) _dbg_mxm_out_req(rreq);
+
+ fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_RECV);
+ return mpi_errno;
+ fn_fail: ATTRIBUTE((unused))
+ goto fn_exit;
+}
+
+
+static int _mxm_handle_rreq(MPID_Request *req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int complete = FALSE;
+ int dt_contig;
+ MPI_Aint dt_true_lb;
+ MPIDI_msg_sz_t userbuf_sz;
+ MPID_Datatype *dt_ptr;
+ MPIDI_msg_sz_t data_sz;
+ MPIDI_VC_t *vc = NULL;
+
+ MPIU_THREAD_CS_ENTER(MSGQUEUE,req);
+ complete = MPIDI_CH3U_Recvq_DP(req)
+ MPIU_THREAD_CS_EXIT(MSGQUEUE,req);
+ if (!complete) {
+ return TRUE;
+ }
+
+ MPIDI_Datatype_get_info(req->dev.user_count, req->dev.datatype, dt_contig, userbuf_sz, dt_ptr, dt_true_lb);
+
+ _dbg_mxm_output(5, "========> Completing RECV req %p status %d\n", req, req->status.MPI_ERROR);
+ _dbg_mxm_out_buf(REQ_FIELD(req, iov_buf)[0].ptr,
+ (REQ_FIELD(req, iov_buf)[0].length > 16 ? 16 : REQ_FIELD(req, iov_buf)[0].length));
+
+ if (req->dev.recv_data_sz <= userbuf_sz) {
+ data_sz = req->dev.recv_data_sz;
+ if (req->status.MPI_ERROR == MPI_ERR_TRUNCATE) {
+ req->status.MPI_ERROR = MPIR_Err_create_code(MPI_SUCCESS,
+ MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_TRUNCATE,
+ "**truncate", "**truncate %d %d %d %d",
+ req->status.MPI_SOURCE, req->status.MPI_TAG,
+ req->dev.recv_data_sz, userbuf_sz );
+ }
+ }
+ else
+ {
+ data_sz = userbuf_sz;
+ MPIR_STATUS_SET_COUNT(req->status, userbuf_sz);
+ MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ "receive buffer too small; message truncated, msg_sz="
+ MPIDI_MSG_SZ_FMT ", userbuf_sz="
+ MPIDI_MSG_SZ_FMT,
+ req->dev.recv_data_sz, userbuf_sz));
+ req->status.MPI_ERROR = MPIR_Err_create_code(MPI_SUCCESS,
+ MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_TRUNCATE,
+ "**truncate", "**truncate %d %d %d %d",
+ req->status.MPI_SOURCE, req->status.MPI_TAG,
+ req->dev.recv_data_sz, userbuf_sz );
+ }
+
+ if ((!dt_contig) && (req->dev.tmpbuf != NULL))
+ {
+ MPIDI_msg_sz_t last;
+
+ last = req->dev.recv_data_sz;
+ MPID_Segment_unpack( req->dev.segment_ptr, 0, &last, req->dev.tmpbuf);
+ MPIU_Free(req->dev.tmpbuf);
+ if (last != data_sz) {
+ MPIR_STATUS_SET_COUNT(req->status, last);
+ if (req->dev.recv_data_sz <= userbuf_sz) {
+ MPIU_ERR_SETSIMPLE(req->status.MPI_ERROR, MPI_ERR_TYPE, "**dtypemismatch");
+ }
+ }
+ }
+
+ if (REQ_FIELD(req, iov_count) > MXM_MPICH_MAX_IOV) {
+ MPIU_Free(REQ_FIELD(req, iov_buf));
+ REQ_FIELD(req, iov_buf) = REQ_FIELD(req, tmp_buf);
+ REQ_FIELD(req, iov_count) = 0;
+ }
+
+ MPIDI_CH3U_Handle_recv_req(vc, req, &complete);
+ MPIU_Assert(complete == TRUE);
+
+ return complete;
+}
+
+
+static void _mxm_recv_completion_cb(void *context)
+{
+ MPID_Request *req = (MPID_Request *)context;
+ mxm_recv_req_t *mxm_rreq;
+
+ MPIU_Assert(req);
+ MPIU_Assert((req->kind == MPID_REQUEST_RECV) || (req->kind == MPID_PREQUEST_RECV));
+ _dbg_mxm_out_req(req);
+
+ _mxm_to_mpi_status(REQ_FIELD(req, mxm_req->item.base.error), &req->status);
+
+ mxm_rreq = &REQ_FIELD(req, mxm_req->item.recv);
+ req->status.MPI_TAG = _mxm_tag_mxm2mpi(mxm_rreq->completion.sender_tag);
+ req->status.MPI_SOURCE = mxm_rreq->completion.sender_imm;
+ req->dev.recv_data_sz = mxm_rreq->completion.actual_len;
+ MPIR_STATUS_SET_COUNT(req->status, req->dev.recv_data_sz);
+
+ if (req->ch.vc) {
+ list_enqueue(&VC_FIELD(req->ch.vc, mxm_ep->free_queue), &REQ_FIELD(req, mxm_req->queue));
+ } else {
+ list_enqueue(&mxm_obj->free_queue, &REQ_FIELD(req, mxm_req->queue));
+ }
+
+ if (likely(!MPIR_STATUS_GET_CANCEL_BIT(req->status))) {
+ _mxm_handle_rreq(req);
+ }
+}
+
+
+static int _mxm_irecv(MPID_nem_mxm_ep_t *ep, MPID_nem_mxm_req_area *req, int id, mxm_mq_h mxm_mq, mxm_tag_t mxm_tag)
+{
+ int mpi_errno = MPI_SUCCESS;
+ mxm_error_t ret = MXM_OK;
+ mxm_recv_req_t *mxm_rreq;
+ list_head_t *free_queue =NULL;
+
+ MPIU_Assert(req);
+
+ free_queue = (ep ? &ep->free_queue : &mxm_obj->free_queue);
+ req->mxm_req = list_dequeue_mxm_req(free_queue);
+ if (!req->mxm_req) {
+ list_grow_mxm_req(free_queue);
+ req->mxm_req = list_dequeue_mxm_req(free_queue);
+ if (!req->mxm_req) {
+ MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "empty free queue");
+ mpi_errno = MPI_ERR_OTHER;
+ goto fn_fail;
+ }
+ }
+ mxm_rreq = &(req->mxm_req->item.recv);
+
+ mxm_rreq->base.state = MXM_REQ_NEW;
+ mxm_rreq->base.mq = mxm_mq;
+ mxm_rreq->base.conn = (ep ? ep->mxm_conn : 0);
+ mxm_rreq->base.completed_cb = _mxm_recv_completion_cb;
+ mxm_rreq->base.context = req->ctx;
+
+ mxm_rreq->tag = mxm_tag;
+ mxm_rreq->tag_mask = _mxm_tag_mask(id);
+
+ if (likely(req->iov_count == 1)) {
+ mxm_rreq->base.data_type = MXM_REQ_DATA_BUFFER;
+ mxm_rreq->base.data.buffer.ptr = req->iov_buf[0].ptr;
+ mxm_rreq->base.data.buffer.length = req->iov_buf[0].length;
+ } else {
+ mxm_rreq->base.data_type = MXM_REQ_DATA_IOV;
+ mxm_rreq->base.data.iov.vector = req->iov_buf;
+ mxm_rreq->base.data.iov.count = req->iov_count;
+ }
+
+ ret = mxm_req_recv(mxm_rreq);
+ if (MXM_OK != ret) {
+ if (ep) {
+ list_enqueue(&ep->free_queue, &req->mxm_req->queue);
+ } else {
+ list_enqueue(&mxm_obj->free_queue, &req->mxm_req->queue);
+ }
+ mpi_errno = MPI_ERR_OTHER;
+ goto fn_fail;
+ }
+// list_enqueue(&ep->out_queue, &req->mxm_req->queue);
+
+fn_exit:
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+
+static int _mxm_process_rdtype(MPID_Request **rreq_p, MPI_Datatype datatype, MPID_Datatype *dt_ptr, MPIDI_msg_sz_t data_sz,
+ const void *buf, int count,
+ mxm_req_buffer_t **iov_buf, int *iov_count)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPID_Request *rreq = *rreq_p;
+ MPIDI_msg_sz_t last;
+ MPID_IOV *iov;
+ int n_iov = 0;
+ int index;
+
+ if (rreq->dev.segment_ptr == NULL)
+ {
+ rreq->dev.segment_ptr = MPID_Segment_alloc();
+ MPIU_ERR_CHKANDJUMP1((rreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ }
+ MPID_Segment_init(buf, count, datatype, rreq->dev.segment_ptr, 0);
+ rreq->dev.segment_first = 0;
+ rreq->dev.segment_size = data_sz;
+
+ last = rreq->dev.segment_size;
+ MPID_Segment_count_contig_blocks(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, (MPI_Aint *)&n_iov);
+ MPIU_Assert(n_iov > 0);
+ iov = MPIU_Malloc(n_iov * sizeof(*iov));
+ MPIU_Assert(iov);
+
+ last = rreq->dev.segment_size;
+ MPID_Segment_unpack_vector(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, iov, &n_iov);
+ MPIU_Assert(last == rreq->dev.segment_size);
+
+ if (n_iov <= MXM_REQ_DATA_MAX_IOV) {
+ if (n_iov > MXM_MPICH_MAX_IOV) {
+ *iov_buf = (mxm_req_buffer_t *)MPIU_Malloc(n_iov * sizeof(**iov_buf));
+ MPIU_Assert(*iov_buf);
+ }
+
+ for(index = 0; index < n_iov ; index++) {
+ (*iov_buf)[index].ptr = iov[index].MPID_IOV_BUF;
+ (*iov_buf)[index].length = iov[index].MPID_IOV_LEN;
+ }
+ rreq->dev.tmpbuf = NULL;
+ rreq->dev.tmpbuf_sz = 0;
+ *iov_count = n_iov;
+ } else {
+ int packsize = 0;
+ MPIR_Pack_size_impl(rreq->dev.user_count, rreq->dev.datatype, (MPI_Aint *)&packsize);
+ rreq->dev.tmpbuf = MPIU_Malloc((size_t) packsize);
+ MPIU_Assert(rreq->dev.tmpbuf);
+ rreq->dev.tmpbuf_sz = packsize;
+ (*iov_buf)[0].ptr = rreq->dev.tmpbuf;
+ (*iov_buf)[0].length = (size_t)packsize;
+ *iov_count = 1 ;
+ }
+ MPIU_Free(iov);
+
+fn_exit:
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_probe.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_probe.c
new file mode 100644
index 0000000..355e182
--- /dev/null
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_probe.c
@@ -0,0 +1,133 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 Mellanox Technologies, Inc.
+ *
+ */
+
+
+
+#include "mxm_impl.h"
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_probe
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_probe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, int context_offset, MPI_Status *status)
+{
+ int mpi_errno = MPI_SUCCESS;
+ mxm_error_t err;
+ mxm_recv_req_t mxm_req;
+
+ MPIDI_STATE_DECL(MPID_STATE_MXM_PROBE);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_PROBE);
+
+ mxm_req.base.state = MXM_REQ_NEW;
+ mxm_req.base.mq = (mxm_mq_h)comm->ch.netmod_comm;
+ mxm_req.base.conn = (vc ? VC_FIELD(vc, mxm_ep->mxm_conn) : 0);
+
+ mxm_req.tag = _mxm_tag_mpi2mxm(tag, comm->context_id + context_offset);
+ mxm_req.tag_mask = _mxm_tag_mask(tag);
+
+ do {
+ err = mxm_req_probe(&mxm_req);
+ _mxm_progress_cb(NULL);
+ } while (err != MXM_ERR_NO_MESSAGE);
+
+ if (MXM_OK == err) {
+ _mxm_to_mpi_status(mxm_req.base.error, status);
+ status->MPI_SOURCE = mxm_req.completion.sender_imm;
+ status->MPI_TAG = _mxm_tag_mxm2mpi(mxm_req.completion.sender_tag);
+ MPIR_STATUS_SET_COUNT(*status, mxm_req.completion.sender_len);
+ } else {
+ mpi_errno = MPI_ERR_INTERN;
+ }
+
+fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_PROBE);
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_iprobe
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_iprobe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, int context_offset, int *flag, MPI_Status *status)
+{
+ int mpi_errno = MPI_SUCCESS;
+ mxm_error_t err;
+ mxm_recv_req_t mxm_req;
+
+ MPIDI_STATE_DECL(MPID_STATE_MXM_IPROBE);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_IPROBE);
+
+ mxm_req.base.state = MXM_REQ_NEW;
+ mxm_req.base.mq = (mxm_mq_h)comm->ch.netmod_comm;
+ mxm_req.base.conn = (vc ? VC_FIELD(vc, mxm_ep->mxm_conn) : 0);
+
+ mxm_req.tag = _mxm_tag_mpi2mxm(tag, comm->context_id + context_offset);
+ mxm_req.tag_mask = _mxm_tag_mask(tag);
+
+ err = mxm_req_probe(&mxm_req);
+ if (MXM_OK == err) {
+ *flag = 1;
+ _mxm_to_mpi_status(mxm_req.base.error, status);
+ status->MPI_SOURCE = mxm_req.completion.sender_imm;
+ status->MPI_TAG = _mxm_tag_mxm2mpi(mxm_req.completion.sender_tag);
+ MPIR_STATUS_SET_COUNT(*status, mxm_req.completion.sender_len);
+ } else if (MXM_ERR_NO_MESSAGE == err) {
+ *flag = 0;
+ } else {
+ mpi_errno = MPI_ERR_INTERN;
+ }
+
+fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_IPROBE);
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_improbe
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_improbe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, int context_offset, int *flag, MPID_Request **message, MPI_Status *status)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIDI_STATE_DECL(MPID_STATE_MXM_IMPROBE);
+ MPIDI_FUNC_ENTER(MPID_STATE_MXM_IMPROBE);
+
+ MPIU_Assert(0 && "not currently implemented");
+
+fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MXM_IMPROBE);
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_anysource_iprobe
+#undef FCNAME
+#define FCNAME MPIU_QUOTE(FUNCNAME)
+int MPID_nem_mxm_anysource_iprobe(int tag, MPID_Comm *comm, int context_offset, int *flag, MPI_Status *status)
+{
+ return MPID_nem_mxm_iprobe(NULL, MPI_ANY_SOURCE, tag, comm, context_offset, flag, status);
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_anysource_iprobe
+#undef FCNAME
+#define FCNAME MPIU_QUOTE(FUNCNAME)
+int MPID_nem_mxm_anysource_improbe(int tag, MPID_Comm *comm, int context_offset, int *flag, MPID_Request **message, MPI_Status *status)
+{
+ return MPID_nem_mxm_improbe(NULL, MPI_ANY_SOURCE, tag, comm, context_offset, flag, message, status);
+}
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c
new file mode 100644
index 0000000..135cff4
--- /dev/null
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c
@@ -0,0 +1,746 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 Mellanox Technologies, Inc.
+ *
+ */
+
+
+
+#include "mxm_impl.h"
+
+enum {
+ MXM_MPICH_ISEND,
+ MXM_MPICH_ISEND_SYNC,
+ MXM_MPICH_ISEND_AM
+};
+
+
+static int _mxm_handle_sreq(MPID_Request *req);
+static void _mxm_send_completion_cb(void *context);
+static int _mxm_isend(MPID_nem_mxm_ep_t *ep, MPID_nem_mxm_req_area *req,
+ int type, mxm_mq_h mxm_mq, int mxm_rank, int id, mxm_tag_t tag, int block);
+static int _mxm_process_sdtype(MPID_Request **rreq_p, MPI_Datatype datatype, MPID_Datatype *dt_ptr, MPIDI_msg_sz_t data_sz,
+ const void *buf, int count,
+ mxm_req_buffer_t **iov_buf, int *iov_count);
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_iSendContig
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data, MPIDI_msg_sz_t data_sz)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ISENDCONTIGMSG);
+ MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_ISENDCONTIGMSG);
+
+ MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "mxm_iSendContig");
+ MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t *)hdr);
+
+ MPIU_Memcpy(&(sreq->dev.pending_pkt), (char *)hdr, sizeof(MPIDI_CH3_Pkt_t));
+ sreq->dev.tmpbuf = NULL;
+
+ REQ_FIELD(sreq, ctx) = sreq;
+ REQ_FIELD(sreq, iov_buf) = REQ_FIELD(sreq, tmp_buf);
+ REQ_FIELD(sreq, iov_count) = 1;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = (void *)&(sreq->dev.pending_pkt);
+ REQ_FIELD(sreq, iov_buf)[0].length = sizeof(MPIDI_CH3_Pkt_t);
+ if (data_sz) {
+ REQ_FIELD(sreq, iov_count) = 2;
+ REQ_FIELD(sreq, iov_buf)[1].ptr = (void *)data;
+ REQ_FIELD(sreq, iov_buf)[1].length = data_sz;
+ }
+
+ _dbg_mxm_output(5, "iSendContig ========> Sending ADI msg for req %p (data_size %d, %d) \n", sreq, sizeof(MPIDI_CH3_Pkt_t), data_sz);
+
+ (VC_FIELD(vc, pending_sends)) += 1;
+ sreq->ch.vc = vc;
+ sreq->ch.noncontig = FALSE;
+
+ mpi_errno = _mxm_isend(VC_FIELD(vc, mxm_ep), REQ_BASE(sreq), MXM_MPICH_ISEND_AM,
+ mxm_obj->mxm_mq, mxm_obj->mxm_rank, MXM_MPICH_HID_ADI_MSG, 0, 0);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_ISENDCONTIGMSG);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_iStartContigMsg
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data, MPIDI_msg_sz_t data_sz, MPID_Request **sreq_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPID_Request *sreq = NULL;
+
+ MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ISTARTCONTIGMSG);
+ MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_ISTARTCONTIGMSG);
+
+ MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "mxm_iStartContigMsg");
+ MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t *)hdr);
+
+ /* create a request */
+ sreq = MPID_Request_create();
+ MPIU_Assert(sreq != NULL);
+ MPIU_Object_set_ref(sreq, 2);
+ MPIU_Memcpy(&(sreq->dev.pending_pkt), (char *)hdr, sizeof(MPIDI_CH3_Pkt_t));
+ sreq->kind = MPID_REQUEST_SEND;
+ sreq->dev.OnDataAvail = NULL;
+ sreq->dev.tmpbuf = NULL;
+
+ _dbg_mxm_output(5, "iStartContigMsg ========> Sending ADI msg for req %p (data_size %d, %d) \n", sreq, sizeof(MPIDI_CH3_Pkt_t), data_sz);
+
+ REQ_FIELD(sreq, ctx) = sreq;
+ REQ_FIELD(sreq, iov_buf) = REQ_FIELD(sreq, tmp_buf);
+ REQ_FIELD(sreq, iov_count) = 1;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = (void *)&(sreq->dev.pending_pkt);
+ REQ_FIELD(sreq, iov_buf)[0].length = sizeof(MPIDI_CH3_Pkt_t);
+ if (data_sz) {
+ REQ_FIELD(sreq, iov_count) = 2;
+ REQ_FIELD(sreq, iov_buf)[1].ptr = (void *)data;
+ REQ_FIELD(sreq, iov_buf)[1].length = data_sz;
+ }
+
+ (VC_FIELD(vc, pending_sends)) += 1;
+ sreq->ch.vc = vc;
+ sreq->ch.noncontig = FALSE;
+
+ mpi_errno = _mxm_isend(VC_FIELD(vc, mxm_ep), REQ_BASE(sreq), MXM_MPICH_ISEND_AM,
+ mxm_obj->mxm_mq, mxm_obj->mxm_rank, MXM_MPICH_HID_ADI_MSG, 0, 0);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+ fn_exit:
+ *sreq_ptr = sreq;
+ MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MX_ISTARTCONTIGMSG);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_SendNoncontig
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPIDI_msg_sz_t hdr_sz)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_msg_sz_t last;
+
+ MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_SENDNONCONTIGMSG);
+ MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_SENDNONCONTIGMSG);
+
+ MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "MPID_nem_mxm_iSendNoncontig");
+
+ MPIU_Memcpy(&(sreq->dev.pending_pkt), (char *)hdr, sizeof(MPIDI_CH3_Pkt_t));
+ sreq->dev.tmpbuf = NULL;
+
+ _dbg_mxm_output(5, "SendNoncontig ========> Sending ADI msg for req %p (data_size %d, %d) \n", sreq, sizeof(MPIDI_CH3_Pkt_t), sreq->dev.segment_size);
+
+ REQ_FIELD(sreq, ctx) = sreq;
+ REQ_FIELD(sreq, iov_buf) = REQ_FIELD(sreq, tmp_buf);
+ REQ_FIELD(sreq, iov_count) = 1;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = (void *)&(sreq->dev.pending_pkt);
+ REQ_FIELD(sreq, iov_buf)[0].length = sizeof(MPIDI_CH3_Pkt_t);
+
+ MPIU_Assert(sreq->dev.segment_first == 0);
+ last = sreq->dev.segment_size;
+ if (last > 0) {
+ sreq->dev.tmpbuf = MPIU_Malloc((size_t)sreq->dev.segment_size);
+ MPIU_Assert(sreq->dev.tmpbuf);
+ MPID_Segment_pack(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, sreq->dev.tmpbuf);
+ MPIU_Assert(last == sreq->dev.segment_size);
+
+ REQ_FIELD(sreq, iov_count) = 2;
+ REQ_FIELD(sreq, iov_buf)[1].ptr = sreq->dev.tmpbuf;
+ REQ_FIELD(sreq, iov_buf)[1].length = last;
+ }
+
+ (VC_FIELD(vc, pending_sends)) += 1;
+ sreq->ch.vc = vc;
+ sreq->ch.noncontig = TRUE;
+
+ mpi_errno = _mxm_isend(VC_FIELD(vc, mxm_ep), REQ_BASE(sreq), MXM_MPICH_ISEND_AM,
+ mxm_obj->mxm_mq, mxm_obj->mxm_rank, MXM_MPICH_HID_ADI_MSG, 0, 0);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_SENDNONCONTIGMSG);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_send
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_send(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype datatype, int rank, int tag,
+ MPID_Comm * comm, int context_offset, MPID_Request **sreq_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPID_Request *sreq = NULL;
+ MPID_Datatype *dt_ptr;
+ int dt_contig;
+ MPIDI_msg_sz_t data_sz;
+ MPI_Aint dt_true_lb;
+
+ MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_SEND);
+ MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_SEND);
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+
+ /* create a request */
+ MPIDI_Request_create_sreq(sreq, mpi_errno, goto fn_exit);
+ MPIU_Assert (sreq != NULL);
+ MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_SEND);
+ MPIDI_VC_FAI_send_seqnum(vc, seqnum);
+ MPIDI_Request_set_seqnum(sreq, seqnum);
+ if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
+ MPID_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
+ MPID_Datatype_add_ref(sreq->dev.datatype_ptr);
+ }
+ sreq->partner_request = NULL;
+ sreq->dev.OnDataAvail = NULL;
+ sreq->dev.tmpbuf = NULL;
+ sreq->ch.vc = vc;
+ sreq->ch.noncontig = FALSE;
+
+ _dbg_mxm_output(5, "Send ========> Sending USER msg for req %p (context %d rank %d tag %d size %d) \n",
+ sreq, comm->context_id + context_offset, comm->rank, tag, data_sz);
+
+ REQ_FIELD(sreq, ctx) = sreq;
+ REQ_FIELD(sreq, iov_buf) = REQ_FIELD(sreq, tmp_buf);
+ REQ_FIELD(sreq, iov_count) = 0;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = NULL;
+ REQ_FIELD(sreq, iov_buf)[0].length = 0;
+
+ if (data_sz) {
+ if (dt_contig) {
+ REQ_FIELD(sreq, iov_count) = 1;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = (char*)(buf) + dt_true_lb;
+ REQ_FIELD(sreq, iov_buf)[0].length = data_sz;
+ } else {
+ MPIDI_msg_sz_t last;
+ MPI_Aint packsize = 0;
+
+ sreq->dev.segment_ptr = MPID_Segment_alloc();
+ MPIU_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ MPIR_Pack_size_impl(count, datatype, &packsize);
+
+ last = data_sz;
+ if (packsize > 0) {
+ sreq->dev.tmpbuf = MPIU_Malloc((size_t)packsize);
+ MPIU_Assert(sreq->dev.tmpbuf);
+ MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
+ MPID_Segment_pack(sreq->dev.segment_ptr, 0, &last, sreq->dev.tmpbuf);
+
+ REQ_FIELD(sreq, iov_count) = 1;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = sreq->dev.tmpbuf;
+ REQ_FIELD(sreq, iov_buf)[0].length = last;
+ }
+ sreq->ch.noncontig = TRUE;
+ }
+ }
+
+ (VC_FIELD(vc, pending_sends)) += 1;
+
+ mpi_errno = _mxm_isend(VC_FIELD(vc, mxm_ep), REQ_BASE(sreq), MXM_MPICH_ISEND,
+ (mxm_mq_h)comm->ch.netmod_comm, comm->rank, tag, _mxm_tag_mpi2mxm(tag, comm->context_id + context_offset), 1);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+ _dbg_mxm_out_req(sreq);
+
+fn_exit:
+ *sreq_ptr = sreq;
+ MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_SEND);
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_ssend
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_ssend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype datatype, int rank, int tag,
+ MPID_Comm * comm, int context_offset, MPID_Request **sreq_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPID_Request *sreq = NULL;
+ MPID_Datatype *dt_ptr;
+ int dt_contig;
+ MPIDI_msg_sz_t data_sz;
+ MPI_Aint dt_true_lb;
+
+ MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_SSEND);
+ MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_SSEND);
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+
+ /* create a request */
+ MPIDI_Request_create_sreq(sreq, mpi_errno, goto fn_exit);
+ MPIU_Assert (sreq != NULL);
+ MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_SEND);
+ MPIDI_VC_FAI_send_seqnum(vc, seqnum);
+ MPIDI_Request_set_seqnum(sreq, seqnum);
+ if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
+ MPID_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
+ MPID_Datatype_add_ref(sreq->dev.datatype_ptr);
+ }
+ sreq->partner_request = NULL;
+ sreq->dev.OnDataAvail = NULL;
+ sreq->dev.tmpbuf = NULL;
+ sreq->ch.vc = vc;
+ sreq->ch.noncontig = FALSE;
+
+ _dbg_mxm_output(5, "sSend ========> Sending USER msg for req %p (context %d rank %d tag %d size %d) \n",
+ sreq, comm->context_id + context_offset, comm->rank, tag, data_sz);
+
+ REQ_FIELD(sreq, ctx) = sreq;
+ REQ_FIELD(sreq, iov_buf) = REQ_FIELD(sreq, tmp_buf);
+ REQ_FIELD(sreq, iov_count) = 0;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = NULL;
+ REQ_FIELD(sreq, iov_buf)[0].length = 0;
+
+ if (data_sz) {
+ if (dt_contig) {
+ REQ_FIELD(sreq, iov_count) = 1;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = (char*)(buf) + dt_true_lb;
+ REQ_FIELD(sreq, iov_buf)[0].length = data_sz;
+ } else {
+ MPIDI_msg_sz_t last;
+ MPI_Aint packsize = 0;
+
+ sreq->dev.segment_ptr = MPID_Segment_alloc();
+ MPIU_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ MPIR_Pack_size_impl(count, datatype, &packsize);
+
+ last = data_sz;
+ if (packsize > 0) {
+ sreq->dev.tmpbuf = MPIU_Malloc((size_t)packsize);
+ MPIU_Assert(sreq->dev.tmpbuf);
+ MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
+ MPID_Segment_pack(sreq->dev.segment_ptr, 0, &last, sreq->dev.tmpbuf);
+
+ REQ_FIELD(sreq, iov_count) = 1;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = sreq->dev.tmpbuf;
+ REQ_FIELD(sreq, iov_buf)[0].length = last;
+ }
+ sreq->ch.noncontig = TRUE;
+ }
+ }
+
+ (VC_FIELD(vc, pending_sends)) += 1;
+
+ mpi_errno = _mxm_isend(VC_FIELD(vc, mxm_ep), REQ_BASE(sreq), MXM_MPICH_ISEND_SYNC,
+ (mxm_mq_h)comm->ch.netmod_comm, comm->rank, tag, _mxm_tag_mpi2mxm(tag, comm->context_id + context_offset), 1);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+ _dbg_mxm_out_req(sreq);
+
+fn_exit:
+ *sreq_ptr = sreq;
+ MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_SSEND);
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_isend
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_isend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype datatype, int rank, int tag,
+ MPID_Comm * comm, int context_offset, MPID_Request **sreq_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPID_Request *sreq = NULL;
+ MPID_Datatype *dt_ptr;
+ int dt_contig;
+ MPIDI_msg_sz_t data_sz;
+ MPI_Aint dt_true_lb;
+
+ MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ISEND);
+ MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_ISEND);
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+
+ /* create a request */
+ MPIDI_Request_create_sreq(sreq, mpi_errno, goto fn_exit);
+ MPIU_Assert (sreq != NULL);
+ MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_SEND);
+ MPIDI_VC_FAI_send_seqnum(vc, seqnum);
+ MPIDI_Request_set_seqnum(sreq, seqnum);
+ if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
+ MPID_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
+ MPID_Datatype_add_ref(sreq->dev.datatype_ptr);
+ }
+ sreq->partner_request = NULL;
+ sreq->dev.OnDataAvail = NULL;
+ sreq->dev.tmpbuf = NULL;
+ sreq->ch.vc = vc;
+ sreq->ch.noncontig = FALSE;
+
+ _dbg_mxm_output(5, "iSend ========> Sending USER msg for req %p (context %d rank %d tag %d size %d) \n",
+ sreq, comm->context_id + context_offset, comm->rank, tag, data_sz);
+
+ REQ_FIELD(sreq, ctx) = sreq;
+ REQ_FIELD(sreq, iov_buf) = REQ_FIELD(sreq, tmp_buf);
+ REQ_FIELD(sreq, iov_count) = 0;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = NULL;
+ REQ_FIELD(sreq, iov_buf)[0].length = 0;
+
+ if (data_sz) {
+ if (dt_contig) {
+ REQ_FIELD(sreq, iov_count) = 1;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = (char*)(buf) + dt_true_lb;
+ REQ_FIELD(sreq, iov_buf)[0].length = data_sz;
+ } else {
+ MPIDI_msg_sz_t last;
+ MPI_Aint packsize = 0;
+
+ sreq->dev.segment_ptr = MPID_Segment_alloc();
+ MPIU_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ MPIR_Pack_size_impl(count, datatype, &packsize);
+
+ last = data_sz;
+ if (packsize > 0) {
+ sreq->dev.tmpbuf = MPIU_Malloc((size_t)packsize);
+ MPIU_Assert(sreq->dev.tmpbuf);
+ MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
+ MPID_Segment_pack(sreq->dev.segment_ptr, 0, &last, sreq->dev.tmpbuf);
+
+ REQ_FIELD(sreq, iov_count) = 1;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = sreq->dev.tmpbuf;
+ REQ_FIELD(sreq, iov_buf)[0].length = last;
+ }
+ sreq->ch.noncontig = TRUE;
+ }
+ }
+
+ (VC_FIELD(vc, pending_sends)) += 1;
+
+ mpi_errno = _mxm_isend(VC_FIELD(vc, mxm_ep), REQ_BASE(sreq), MXM_MPICH_ISEND,
+ (mxm_mq_h)comm->ch.netmod_comm, comm->rank, tag, _mxm_tag_mpi2mxm(tag, comm->context_id + context_offset), 0);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+ _dbg_mxm_out_req(sreq);
+
+fn_exit:
+ *sreq_ptr = sreq;
+ MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_ISEND);
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPID_nem_mxm_issend
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+int MPID_nem_mxm_issend(MPIDI_VC_t *vc, const void * buf, int count, MPI_Datatype datatype, int rank, int tag,
+ MPID_Comm * comm, int context_offset, MPID_Request **sreq_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPID_Request *sreq = NULL;
+ MPID_Datatype *dt_ptr;
+ int dt_contig;
+ MPIDI_msg_sz_t data_sz;
+ MPI_Aint dt_true_lb;
+
+ MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ISSEND);
+ MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_ISSEND);
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+
+ /* create a request */
+ MPIDI_Request_create_sreq(sreq, mpi_errno, goto fn_exit);
+ MPIU_Assert (sreq != NULL);
+ MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_SEND);
+ MPIDI_VC_FAI_send_seqnum(vc, seqnum);
+ MPIDI_Request_set_seqnum(sreq, seqnum);
+ if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
+ MPID_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
+ MPID_Datatype_add_ref(sreq->dev.datatype_ptr);
+ }
+ sreq->partner_request = NULL;
+ sreq->dev.OnDataAvail = NULL;
+ sreq->dev.tmpbuf = NULL;
+ sreq->ch.vc = vc;
+ sreq->ch.noncontig = FALSE;
+
+ _dbg_mxm_output(5, "isSend ========> Sending USER msg for req %p (context %d rank %d tag %d size %d) \n",
+ sreq, comm->context_id + context_offset, comm->rank, tag, data_sz);
+
+ REQ_FIELD(sreq, ctx) = sreq;
+ REQ_FIELD(sreq, iov_buf) = REQ_FIELD(sreq, tmp_buf);
+ REQ_FIELD(sreq, iov_count) = 0;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = NULL;
+ REQ_FIELD(sreq, iov_buf)[0].length = 0;
+
+ if (data_sz) {
+ if (dt_contig) {
+ REQ_FIELD(sreq, iov_count) = 1;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = (char*)(buf) + dt_true_lb;
+ REQ_FIELD(sreq, iov_buf)[0].length = data_sz;
+ } else {
+ MPIDI_msg_sz_t last;
+ MPI_Aint packsize = 0;
+
+ sreq->dev.segment_ptr = MPID_Segment_alloc();
+ MPIU_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ MPIR_Pack_size_impl(count, datatype, &packsize);
+
+ last = data_sz;
+ if (packsize > 0) {
+ sreq->dev.tmpbuf = MPIU_Malloc((size_t)packsize);
+ MPIU_Assert(sreq->dev.tmpbuf);
+ MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
+ MPID_Segment_pack(sreq->dev.segment_ptr, 0, &last, sreq->dev.tmpbuf);
+
+ REQ_FIELD(sreq, iov_count) = 1;
+ REQ_FIELD(sreq, iov_buf)[0].ptr = sreq->dev.tmpbuf;
+ REQ_FIELD(sreq, iov_buf)[0].length = last;
+ }
+ sreq->ch.noncontig = TRUE;
+ }
+ }
+
+ (VC_FIELD(vc, pending_sends)) += 1;
+
+ mpi_errno = _mxm_isend(VC_FIELD(vc, mxm_ep), REQ_BASE(sreq), MXM_MPICH_ISEND_SYNC,
+ (mxm_mq_h)comm->ch.netmod_comm, comm->rank, tag, _mxm_tag_mpi2mxm(tag, comm->context_id + context_offset), 0);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+
+ _dbg_mxm_out_req(sreq);
+
+fn_exit:
+ *sreq_ptr = sreq;
+ MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_ISSEND);
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+
+static int _mxm_handle_sreq(MPID_Request *req)
+{
+ int complete = FALSE;
+ int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
+
+ _dbg_mxm_output(5, "========> Completing SEND req %p status %d\n", req, req->status.MPI_ERROR);
+ _dbg_mxm_out_buf(REQ_FIELD(req, iov_buf)[0].ptr,
+ (REQ_FIELD(req, iov_buf)[0].length > 16 ? 16 : REQ_FIELD(req, iov_buf)[0].length));
+
+ (VC_FIELD(req->ch.vc, pending_sends)) -= 1;
+ if (((req->dev.datatype_ptr != NULL) && (req->dev.tmpbuf != NULL))) {
+ MPIU_Free(req->dev.tmpbuf);
+ }
+
+ if (REQ_FIELD(req, iov_count) > MXM_MPICH_MAX_IOV) {
+ MPIU_Free(REQ_FIELD(req, iov_buf));
+ REQ_FIELD(req, iov_buf) = REQ_FIELD(req, tmp_buf);
+ REQ_FIELD(req, iov_count) = 0;
+ }
+
+ reqFn = req->dev.OnDataAvail;
+ if (!reqFn) {
+ MPIDI_CH3U_Request_complete(req);
+ MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ } else {
+ MPIDI_VC_t *vc = req->ch.vc;
+
+ reqFn(vc, req, &complete);
+ if (!complete) {
+ MPIU_Assert(complete == TRUE);
+ }
+ }
+
+ return complete;
+}
+
+
+static void _mxm_send_completion_cb(void *context)
+{
+ MPID_Request *req = (MPID_Request *)context;
+
+ MPIU_Assert(req);
+ MPIU_Assert((req->kind == MPID_REQUEST_SEND) || (req->kind == MPID_PREQUEST_SEND));
+ _dbg_mxm_out_req(req);
+
+ _mxm_to_mpi_status(REQ_FIELD(req, mxm_req->item.base.error), &req->status);
+
+ list_enqueue(&VC_FIELD(req->ch.vc, mxm_ep->free_queue), &REQ_FIELD(req, mxm_req->queue));
+
+ if (likely(!MPIR_STATUS_GET_CANCEL_BIT(req->status))) {
+ _mxm_handle_sreq(req);
+ }
+}
+
+
+static int _mxm_isend(MPID_nem_mxm_ep_t *ep, MPID_nem_mxm_req_area *req,
+ int type, mxm_mq_h mxm_mq, int mxm_rank, int id, mxm_tag_t mxm_tag, int block)
+{
+ int mpi_errno = MPI_SUCCESS;
+ mxm_error_t ret = MXM_OK;
+ mxm_send_req_t *mxm_sreq;
+ list_head_t *free_queue =NULL;
+
+ MPIU_Assert(ep);
+ MPIU_Assert(req);
+
+ free_queue = &ep->free_queue;
+ req->mxm_req = list_dequeue_mxm_req(free_queue);
+ if (!req->mxm_req) {
+ list_grow_mxm_req(free_queue);
+ req->mxm_req = list_dequeue_mxm_req(free_queue);
+ if (!req->mxm_req) {
+ MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "empty free queue");
+ mpi_errno = MPI_ERR_OTHER;
+ goto fn_fail;
+ }
+ }
+ mxm_sreq = &(req->mxm_req->item.send);
+
+ mxm_sreq->base.state = MXM_REQ_NEW;
+ mxm_sreq->base.mq = mxm_mq;
+ mxm_sreq->base.conn = ep->mxm_conn;
+ mxm_sreq->base.completed_cb = _mxm_send_completion_cb;
+ mxm_sreq->base.context = req->ctx;
+
+ if (type == MXM_MPICH_ISEND_AM) {
+ mxm_sreq->opcode = MXM_REQ_OP_AM;
+ mxm_sreq->flags = 0;
+
+ mxm_sreq->op.am.hid = id;
+ mxm_sreq->op.am.imm_data = mxm_rank;
+ } else if (type == MXM_MPICH_ISEND_SYNC) {
+ mxm_sreq->opcode = MXM_REQ_OP_SEND_SYNC;
+ mxm_sreq->flags = 0;
+
+ mxm_sreq->op.send.tag = mxm_tag;
+ mxm_sreq->op.send.imm_data = mxm_rank;
+ } else {
+ mxm_sreq->opcode = MXM_REQ_OP_SEND;
+ mxm_sreq->flags = 0;
+
+ mxm_sreq->op.send.tag = mxm_tag;
+ mxm_sreq->op.send.imm_data = mxm_rank;
+ }
+
+ if (likely(req->iov_count == 1)) {
+ mxm_sreq->base.data_type = MXM_REQ_DATA_BUFFER;
+ mxm_sreq->base.data.buffer.ptr = req->iov_buf[0].ptr;
+ mxm_sreq->base.data.buffer.length = req->iov_buf[0].length;
+ } else {
+ mxm_sreq->base.data_type = MXM_REQ_DATA_IOV;
+ mxm_sreq->base.data.iov.vector = req->iov_buf;
+ mxm_sreq->base.data.iov.count = req->iov_count;
+ }
+
+ ret = mxm_req_send(mxm_sreq);
+ if (MXM_OK != ret) {
+ list_enqueue(&ep->free_queue, &req->mxm_req->queue);
+ mpi_errno = MPI_ERR_OTHER;
+ goto fn_fail;
+ }
+
+ if (block)
+ _mxm_req_wait(&mxm_sreq->base);
+// list_enqueue(&ep->out_queue, &req->mxm_req->queue);
+
+fn_exit:
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+
+static int _mxm_process_sdtype(MPID_Request **sreq_p, MPI_Datatype datatype, MPID_Datatype *dt_ptr, MPIDI_msg_sz_t data_sz,
+ const void *buf, int count,
+ mxm_req_buffer_t **iov_buf, int *iov_count)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPID_Request *sreq = *sreq_p;
+ MPIDI_msg_sz_t last;
+ MPID_IOV *iov;
+ int n_iov = 0;
+ int index;
+ int size_to_copy = 0;
+
+ sreq->dev.segment_ptr = MPID_Segment_alloc();
+ MPIU_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+
+ MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
+ sreq->dev.segment_first = 0;
+ sreq->dev.segment_size = data_sz;
+
+ last = sreq->dev.segment_size;
+ MPID_Segment_count_contig_blocks(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, (MPI_Aint *)&n_iov);
+ MPIU_Assert(n_iov > 0);
+ iov = MPIU_Malloc(n_iov * sizeof(*iov));
+ MPIU_Assert(iov);
+
+ last = sreq->dev.segment_size;
+ MPID_Segment_pack_vector(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, iov, &n_iov);
+ MPIU_Assert(last == sreq->dev.segment_size);
+
+ if (n_iov > MXM_MPICH_MAX_IOV) {
+ *iov_buf = (mxm_req_buffer_t *)MPIU_Malloc(n_iov * sizeof(**iov_buf));
+ MPIU_Assert(*iov_buf);
+ }
+
+ for(index = 0; index < n_iov ; index++) {
+ if (index < (MXM_REQ_DATA_MAX_IOV - 1)) {
+ (*iov_buf)[index].ptr = iov[index].MPID_IOV_BUF;
+ (*iov_buf)[index].length = iov[index].MPID_IOV_LEN;
+ } else {
+ size_to_copy += iov[index].MPID_IOV_LEN;
+ }
+ }
+
+ if (size_to_copy == 0) {
+ sreq->dev.tmpbuf = NULL;
+ sreq->dev.tmpbuf_sz = 0;
+ *iov_count = n_iov;
+ } else {
+ int offset = 0;
+ sreq->dev.tmpbuf = MPIU_Malloc(size_to_copy);
+ sreq->dev.tmpbuf_sz = size_to_copy;
+ MPIU_Assert(sreq->dev.tmpbuf);
+ for(index = (MXM_REQ_DATA_MAX_IOV - 1); index < n_iov; index++) {
+ MPIU_Memcpy((char *)(sreq->dev.tmpbuf) + offset, iov[index].MPID_IOV_BUF, iov[index].MPID_IOV_LEN);
+ offset += iov[index].MPID_IOV_LEN;
+ }
+ (*iov_buf)[MXM_REQ_DATA_MAX_IOV - 1].ptr = sreq->dev.tmpbuf;
+ (*iov_buf)[MXM_REQ_DATA_MAX_IOV - 1].length = size_to_copy;
+ *iov_count = MXM_REQ_DATA_MAX_IOV;
+ }
+ MPIU_Free(iov);
+
+fn_exit:
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/subconfigure.m4 b/src/mpid/ch3/channels/nemesis/netmod/mxm/subconfigure.m4
new file mode 100644
index 0000000..6920697
--- /dev/null
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/subconfigure.m4
@@ -0,0 +1,40 @@
+[#] start of __file__
+dnl MPICH_SUBCFG_AFTER=src/mpid/ch3/channels/nemesis
+
+AC_DEFUN([PAC_SUBCFG_PREREQ_]PAC_SUBCFG_AUTO_SUFFIX,[
+ AM_COND_IF([BUILD_CH3_NEMESIS],[
+ for net in $nemesis_networks ; do
+ AS_CASE([$net],[mxm],[build_nemesis_netmod_mxm=yes])
+ done
+ ])
+ AM_CONDITIONAL([BUILD_NEMESIS_NETMOD_MXM],[test "X$build_nemesis_netmod_mxm" = "Xyes"])
+])dnl
+
+AC_DEFUN([PAC_SUBCFG_BODY_]PAC_SUBCFG_AUTO_SUFFIX,[
+AM_COND_IF([BUILD_NEMESIS_NETMOD_MXM],[
+ AC_MSG_NOTICE([RUNNING CONFIGURE FOR ch3:nemesis:mxm])
+
+ PAC_CHECK_HEADER_LIB_FATAL(mxm, [mxm/api/mxm_api.h], mxm, mxm_get_version)
+ AC_CHECK_HEADER([mxm/api/mxm_api.h], , [
+ AC_MSG_ERROR(['mxm/api/mxm_api.h not found.'])
+ ])
+ AC_TRY_COMPILE([
+ #include "mxm/api/mxm_version.h"
+#ifndef MXM_VERSION
+#error "MXM Version is less than 1.5, please upgrade"
+#endif
+#
+#if MXM_API < MXM_VERSION(3,0)
+#error "MXM Version is less than 3.0, please upgrade"
+#endif],
+ [int a=0;],
+ mxm_api_version=yes,
+ mxm_api_version=no)
+ if test "$mxm_api_version" = no ; then
+ AC_MSG_ERROR(['MXM API version Problem. Are you running a recent version of MXM (at least 3.0)?'])
+ fi;
+ AC_DEFINE([ENABLE_COMM_OVERRIDES], 1, [define to add per-vc function pointers to override send and recv functions])
+
+])dnl end AM_COND_IF(BUILD_NEMESIS_NETMOD_MXM,...)
+])dnl end _BODY
+[#] end of __file__
diff --git a/src/mpid/ch3/channels/nemesis/subconfigure.m4 b/src/mpid/ch3/channels/nemesis/subconfigure.m4
index 558cbdf..ea46a69 100644
--- a/src/mpid/ch3/channels/nemesis/subconfigure.m4
+++ b/src/mpid/ch3/channels/nemesis/subconfigure.m4
@@ -95,6 +95,7 @@ AC_CHECK_FUNCS(signal)
PAC_SET_HEADER_LIB_PATH(mx)
PAC_SET_HEADER_LIB_PATH(scif)
PAC_SET_HEADER_LIB_PATH(ib)
+PAC_SET_HEADER_LIB_PATH(mxm)
nemesis_nets_dirs=""
nemesis_nets_strings=""
-----------------------------------------------------------------------
Summary of changes:
src/mpi/errhan/errnames.txt | 16 +
src/mpid/ch3/channels/nemesis/netmod/Makefile.mk | 2 +
.../ch3/channels/nemesis/netmod/mxm/Makefile.mk | 22 +
.../ch3/channels/nemesis/netmod/mxm/mxm_cancel.c | 70 ++
.../ch3/channels/nemesis/netmod/mxm/mxm_finalize.c | 11 +
.../ch3/channels/nemesis/netmod/mxm/mxm_impl.h | 400 +++++++++++
.../ch3/channels/nemesis/netmod/mxm/mxm_init.c | 551 +++++++++++++++
.../ch3/channels/nemesis/netmod/mxm/mxm_poll.c | 436 ++++++++++++
.../ch3/channels/nemesis/netmod/mxm/mxm_probe.c | 133 ++++
.../ch3/channels/nemesis/netmod/mxm/mxm_send.c | 746 ++++++++++++++++++++
.../channels/nemesis/netmod/mxm/subconfigure.m4 | 40 +
src/mpid/ch3/channels/nemesis/subconfigure.m4 | 1 +
src/mpid/ch3/include/mpidpre.h | 1 +
src/mpid/ch3/src/mpid_cancel_recv.c | 26 +-
src/mpid/ch3/src/mpid_cancel_send.c | 10 +
15 files changed, 2462 insertions(+), 3 deletions(-)
create mode 100644 src/mpid/ch3/channels/nemesis/netmod/mxm/Makefile.mk
create mode 100644 src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_cancel.c
create mode 100644 src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_finalize.c
create mode 100644 src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_impl.h
create mode 100644 src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c
create mode 100644 src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_poll.c
create mode 100644 src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_probe.c
create mode 100644 src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c
create mode 100644 src/mpid/ch3/channels/nemesis/netmod/mxm/subconfigure.m4
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.2-7-g9bd821e
by noreply@mpich.org 22 Jul '14
by noreply@mpich.org 22 Jul '14
22 Jul '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via 9bd821e448f445ad4a75f7f487144d11656937de (commit)
via 5bf85455a6853410d43fc6e363f2451a54a5c7cd (commit)
from 39fe32a8b0a6476d80cf11142d4010e40e8da4ce (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/9bd821e448f445ad4a75f7f487144d116…
commit 9bd821e448f445ad4a75f7f487144d11656937de
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Tue Jul 22 15:52:51 2014 -0500
portals4: correct MPIU_Assert conditional
When making progress on a large send, the source will see events of
type PTL_EVENT_GET or PTL_EVENT_ACK, indicating completion of operations
at the target. This assertion incorrectly failed on PTL_EVENT_GET,
probably from a copy/paste error from the above "if" statement.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_send.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_send.c
index 59bcd3e..ae2120a 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_send.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_send.c
@@ -56,7 +56,7 @@ static int handler_large(const ptl_event_t *e)
MPIU_Error_printf("ACK event expected, received %s ni_fail=%s list=%s user_ptr=%p hdr_data=%#lx\n",
MPID_nem_ptl_strevent(e), MPID_nem_ptl_strnifail(e->ni_fail_type),
MPID_nem_ptl_strlist(e->ptl_list), e->user_ptr, e->hdr_data);
- MPIU_Assert(e->type == PTL_EVENT_ACK || e->type != PTL_EVENT_GET);
+ MPIU_Assert(e->type == PTL_EVENT_ACK || e->type == PTL_EVENT_GET);
if (e->type == PTL_EVENT_ACK && e->mlength < PTL_LARGE_THRESHOLD) {
/* truncated message */
http://git.mpich.org/mpich.git/commitdiff/5bf85455a6853410d43fc6e363f2451a5…
commit 5bf85455a6853410d43fc6e363f2451a54a5c7cd
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Tue Jul 22 15:27:18 2014 -0500
portals4: swap arguments to MPIU_Memcpy
Source and destination were in the wrong order. In large contiguous
messages, the first chunk of target buffer was not updated.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_recv.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_recv.c
index 0ccb937..6760165 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_recv.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_recv.c
@@ -204,7 +204,7 @@ static int handler_recv_dequeue_large(const ptl_event_t *e)
/* unpack data from unexpected buffer first */
if (e->type == PTL_EVENT_PUT_OVERFLOW) {
if (dt_contig) {
- MPIU_Memcpy(e->start, rreq->dev.user_buf, e->mlength);
+ MPIU_Memcpy(rreq->dev.user_buf, e->start, e->mlength);
} else {
rreq->dev.segment_first = 0;
last = e->mlength;
-----------------------------------------------------------------------
Summary of changes:
.../channels/nemesis/netmod/portals4/ptl_recv.c | 2 +-
.../channels/nemesis/netmod/portals4/ptl_send.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.2-5-g39fe32a
by noreply@mpich.org 21 Jul '14
by noreply@mpich.org 21 Jul '14
21 Jul '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via 39fe32a8b0a6476d80cf11142d4010e40e8da4ce (commit)
via 06c1391cc88937abc6661309cde12a8c2d3ad8e7 (commit)
via 0aec805e36a425a24a672ea2d554e016ade0a024 (commit)
via faa37d89d90db3687754045595cd94c3102650b2 (commit)
via 983df3aeeb6f43046e7f1b569c1ad5881b14d0b8 (commit)
from 461431a019a1500e48ec73637b8bbba40cfc0fb8 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/39fe32a8b0a6476d80cf11142d4010e40…
commit 39fe32a8b0a6476d80cf11142d4010e40e8da4ce
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Sat Jul 19 15:42:48 2014 -0500
Created an enum for packet flags.
We were using defines instead of enum to represent the same class of
flags.
Signed-off-by: Wesley Bland <wbland(a)anl.gov>
diff --git a/src/mpid/ch3/include/mpidpkt.h b/src/mpid/ch3/include/mpidpkt.h
index 44a674f..98c5fce 100644
--- a/src/mpid/ch3/include/mpidpkt.h
+++ b/src/mpid/ch3/include/mpidpkt.h
@@ -110,18 +110,17 @@ typedef enum
MPIDI_CH3_PKT_INVALID = -1 /* forces a signed enum to quash warnings */
} MPIDI_CH3_Pkt_type_t;
-typedef uint16_t MPIDI_CH3_Pkt_flags_t;
-
- /* Flag vector bits:*/
-#define MPIDI_CH3_PKT_FLAG_NONE 0
-#define MPIDI_CH3_PKT_FLAG_RMA_LOCK 1 /* ...............X */
-#define MPIDI_CH3_PKT_FLAG_RMA_UNLOCK 2 /* ..............X. */
-#define MPIDI_CH3_PKT_FLAG_RMA_FLUSH 4 /* .............X.. */
-#define MPIDI_CH3_PKT_FLAG_RMA_REQ_ACK 8 /* ............X... */
-#define MPIDI_CH3_PKT_FLAG_RMA_AT_COMPLETE 16 /* ...........X.... */
-#define MPIDI_CH3_PKT_FLAG_RMA_NOCHECK 32 /* ..........X..... */
-#define MPIDI_CH3_PKT_FLAG_RMA_SHARED 64 /* .........X...... */
-#define MPIDI_CH3_PKT_FLAG_RMA_EXCLUSIVE 128 /* ........X....... */
+typedef enum {
+ MPIDI_CH3_PKT_FLAG_NONE = 0,
+ MPIDI_CH3_PKT_FLAG_RMA_LOCK = 1,
+ MPIDI_CH3_PKT_FLAG_RMA_UNLOCK = 2,
+ MPIDI_CH3_PKT_FLAG_RMA_FLUSH = 4,
+ MPIDI_CH3_PKT_FLAG_RMA_REQ_ACK = 8,
+ MPIDI_CH3_PKT_FLAG_RMA_AT_COMPLETE = 16,
+ MPIDI_CH3_PKT_FLAG_RMA_NOCHECK = 32,
+ MPIDI_CH3_PKT_FLAG_RMA_SHARED = 64,
+ MPIDI_CH3_PKT_FLAG_RMA_EXCLUSIVE = 128
+} MPIDI_CH3_Pkt_flags_t;
typedef struct MPIDI_CH3_Pkt_send
{
http://git.mpich.org/mpich.git/commitdiff/06c1391cc88937abc6661309cde12a8c2…
commit 06c1391cc88937abc6661309cde12a8c2d3ad8e7
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Sat Jul 19 15:39:18 2014 -0500
Allow channel packet handlers in the CH3 structure.
In nemesis we were managing a separate enum for the nemesis packet
handlers, which was somehow being force compared against the CH3
packet handler enums. This is weird and a recipe for bugs. This
patch unifies them into a single enum, but allowing the channel to
declare its own packet handlers into the structure.
Signed-off-by: Wesley Bland <wbland(a)anl.gov>
diff --git a/src/mpid/ch3/channels/nemesis/include/mpid_nem_impl.h b/src/mpid/ch3/channels/nemesis/include/mpid_nem_impl.h
index f0096f5..c32e9df 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpid_nem_impl.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpid_nem_impl.h
@@ -45,20 +45,6 @@ int MPID_nem_barrier_vars_init (MPID_nem_barrier_vars_t *barrier_region);
* escape earlier than this check. */
#define MPID_nem_fbox_is_full(pbox_) (OPA_load_acquire_int(&(pbox_)->flag.value))
-/* Nemesis packets */
-
-typedef enum MPID_nem_pkt_type
-{
- MPIDI_NEM_PKT_LMT_RTS = MPIDI_CH3_PKT_END_ALL+1,
- MPIDI_NEM_PKT_LMT_CTS,
- MPIDI_NEM_PKT_LMT_DONE,
- MPIDI_NEM_PKT_LMT_COOKIE,
- MPIDI_NEM_PKT_CKPT_MARKER,
- MPIDI_NEM_PKT_NETMOD,
- MPIDI_NEM_PKT_END,
- MPIDI_NEM_PKT_INVALID = -1 /* forces a signed enum to quash warnings */
-} MPID_nem_pkt_type_t;
-
typedef struct MPID_nem_pkt_lmt_rts
{
MPIDI_CH3_Pkt_type_t type;
diff --git a/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_pre.h b/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_pre.h
index 149b5f2..1fa883b 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_pre.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_pre.h
@@ -19,6 +19,15 @@
/*#define HAVE_CH3_PRE_INIT*/
/* #define MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS */
#define MPIDI_DEV_IMPLEMENTS_KVS
+
+/* Nemesis packets */
+#define MPIDI_CH3_PKT_ENUM \
+ MPIDI_NEM_PKT_LMT_RTS, \
+ MPIDI_NEM_PKT_LMT_CTS, \
+ MPIDI_NEM_PKT_LMT_DONE, \
+ MPIDI_NEM_PKT_LMT_COOKIE, \
+ MPIDI_NEM_PKT_CKPT_MARKER, \
+ MPIDI_NEM_PKT_NETMOD
typedef enum MPIDI_CH3I_VC_state
{
diff --git a/src/mpid/ch3/channels/nemesis/netmod/ib/ib_impl.h b/src/mpid/ch3/channels/nemesis/netmod/ib/ib_impl.h
index 0a94f8d..a42df5d 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/ib/ib_impl.h
+++ b/src/mpid/ch3/channels/nemesis/netmod/ib/ib_impl.h
@@ -677,7 +677,7 @@ typedef enum MPID_nem_ib_pkt_subtype {
/* derived from MPID_nem_pkt_netmod_t */
typedef struct MPID_nem_ib_pkt_prefix {
- MPID_nem_pkt_type_t type;
+ MPIDI_CH3_Pkt_type_t type;
unsigned subtype;
/* additional field */
int16_t seq_num_tail;
@@ -685,7 +685,7 @@ typedef struct MPID_nem_ib_pkt_prefix {
/* derived from MPID_nem_pkt_netmod_t and MPID_nem_pkt_lmt_done_t */
typedef struct MPID_nem_ib_pkt_lmt_get_done {
- MPID_nem_pkt_type_t type;
+ MPIDI_CH3_Pkt_type_t type;
unsigned subtype;
/* additional field */
MPI_Request req_id;
@@ -694,7 +694,7 @@ typedef struct MPID_nem_ib_pkt_lmt_get_done {
/* derived from MPID_nem_pkt_netmod_t */
typedef struct MPID_nem_ib_pkt_req_seq_num_t {
- MPID_nem_pkt_type_t type;
+ MPIDI_CH3_Pkt_type_t type;
unsigned subtype;
/* additional field */
int16_t seq_num_tail;
@@ -702,7 +702,7 @@ typedef struct MPID_nem_ib_pkt_req_seq_num_t {
/* derived from MPID_nem_pkt_netmod_t */
typedef struct MPID_nem_ib_pkt_reply_seq_num_t {
- MPID_nem_pkt_type_t type;
+ MPIDI_CH3_Pkt_type_t type;
unsigned subtype;
/* additional field */
int16_t seq_num_tail;
@@ -710,7 +710,7 @@ typedef struct MPID_nem_ib_pkt_reply_seq_num_t {
/* derived from MPID_nem_pkt_netmod_t */
typedef struct MPID_nem_ib_pkt_change_rdmabuf_occupancy_notify_state_t {
- MPID_nem_pkt_type_t type;
+ MPIDI_CH3_Pkt_type_t type;
unsigned subtype;
/* additional field */
int state;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/ib/ib_poll.c b/src/mpid/ch3/channels/nemesis/netmod/ib/ib_poll.c
index 4426052..a7858d7 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/ib/ib_poll.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/ib/ib_poll.c
@@ -624,9 +624,9 @@ int MPID_nem_ib_poll_eager(MPID_nem_ib_ringbuf_t * ringbuf)
MPIU_Assert(MPID_NEM_IB_NETMOD_HDR_SZ_GET(buf) >=
sz_pkt + sizeof(MPIDI_CH3_Pkt_t) + sizeof(MPID_nem_ib_netmod_trailer_t));
dprintf
- ("handle_pkt,before,%d<-%d,id=%d,pkt->type=%d,pcc=%d,MPIDI_NEM_PKT_END=%d,pkt=%p,subtype=%d\n",
+ ("handle_pkt,before,%d<-%d,id=%d,pkt->type=%d,pcc=%d,MPIDI_CH3_PKT_END_ALL=%d,pkt=%p,subtype=%d\n",
MPID_nem_ib_myrank, vc->pg_rank, *remote_poll, pkt->type,
- MPIDI_CH3I_progress_completion_count.v, MPIDI_NEM_PKT_END, pkt,
+ MPIDI_CH3I_progress_completion_count.v, MPIDI_CH3_PKT_END_ALL, pkt,
((MPID_nem_pkt_netmod_t *) pkt)->subtype);
/* see MPIDI_CH3_PktHandler_EagerSend (in src/mpid/ch3/src/ch3u_eager.c) */
mpi_errno =
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3_progress.c b/src/mpid/ch3/channels/nemesis/src/ch3_progress.c
index 785476a..2b58bfe 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3_progress.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3_progress.c
@@ -28,7 +28,7 @@ static struct { vc_term_element_t *head, *tail; } vc_term_queue;
#define TERMQ_ENQUEUE(ep) GENERIC_Q_ENQUEUE(&vc_term_queue, ep, next)
#define TERMQ_DEQUEUE(epp) GENERIC_Q_DEQUEUE(&vc_term_queue, epp, next)
-#define PKTARRAY_SIZE (MPIDI_NEM_PKT_END+1)
+#define PKTARRAY_SIZE (MPIDI_CH3_PKT_END_ALL+1)
static MPIDI_CH3_PktHandler_Fcn *pktArray[PKTARRAY_SIZE];
#ifndef MPIDI_POSTED_RECV_ENQUEUE_HOOK
@@ -387,7 +387,7 @@ int MPIDI_CH3I_Progress (MPID_Progress_state *progress_state, int is_blocking)
vc_ch = &vc->ch;
/* invalid pkt data will result in unpredictable behavior */
- MPIU_Assert(pkt->type >= 0 && pkt->type < MPIDI_NEM_PKT_END);
+ MPIU_Assert(pkt->type >= 0 && pkt->type < MPIDI_CH3_PKT_END_ALL);
mpi_errno = pktArray[pkt->type](vc, pkt, &buflen, &rreq);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -629,7 +629,7 @@ int MPID_nem_handle_pkt(MPIDI_VC_t *vc, char *buf, MPIDI_msg_sz_t buflen)
MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "received new message");
/* invalid pkt data will result in unpredictable behavior */
- MPIU_Assert(pkt->type >= 0 && pkt->type < MPIDI_NEM_PKT_END);
+ MPIU_Assert(pkt->type >= 0 && pkt->type < MPIDI_CH3_PKT_END_ALL);
mpi_errno = pktArray[pkt->type](vc, pkt, &len, &rreq);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -677,7 +677,7 @@ int MPID_nem_handle_pkt(MPIDI_VC_t *vc, char *buf, MPIDI_msg_sz_t buflen)
buf += copylen;
/* invalid pkt data will result in unpredictable behavior */
- MPIU_Assert(pkt->type >= 0 && pkt->type < MPIDI_NEM_PKT_END);
+ MPIU_Assert(pkt->type >= 0 && pkt->type < MPIDI_CH3_PKT_END_ALL);
pktlen = sizeof(MPIDI_CH3_Pkt_t);
mpi_errno = pktArray[pkt->type](vc, pkt, &pktlen, &rreq);
@@ -828,7 +828,7 @@ int MPIDI_CH3I_Progress_init(void)
MPIDI_CH3I_shm_active_send = NULL;
/* Initialize the code to handle incoming packets */
- if (PKTARRAY_SIZE <= MPIDI_NEM_PKT_END) {
+ if (PKTARRAY_SIZE <= MPIDI_CH3_PKT_END_ALL) {
MPIU_ERR_SETFATALANDJUMP(mpi_errno, MPI_ERR_INTERN, "**ch3|pktarraytoosmall");
}
/* pkt handlers from CH3 */
diff --git a/src/mpid/ch3/channels/nemesis/src/mpid_nem_ckpt.c b/src/mpid/ch3/channels/nemesis/src/mpid_nem_ckpt.c
index 82df5f3..ac29029 100644
--- a/src/mpid/ch3/channels/nemesis/src/mpid_nem_ckpt.c
+++ b/src/mpid/ch3/channels/nemesis/src/mpid_nem_ckpt.c
@@ -579,7 +579,7 @@ int MPIDI_nem_ckpt_pkthandler_init(MPIDI_CH3_PktHandler_Fcn *pktArray[], int arr
MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_CKPT_PKTHANDLER_INIT);
/* Check that the array is large enough */
- if (arraySize <= MPIDI_NEM_PKT_END) {
+ if (arraySize <= MPIDI_CH3_PKT_END_ALL) {
MPIU_ERR_SETFATALANDJUMP(mpi_errno,MPI_ERR_INTERN, "**ch3|pktarraytoosmall");
}
diff --git a/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt.c b/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt.c
index 3b3aec9..de31188 100644
--- a/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt.c
+++ b/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt.c
@@ -40,7 +40,7 @@ int MPID_nem_lmt_pkthandler_init(MPIDI_CH3_PktHandler_Fcn *pktArray[], int array
MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_PKTHANDLER_INIT);
/* Check that the array is large enough */
- if (arraySize <= MPIDI_NEM_PKT_END) {
+ if (arraySize <= MPIDI_CH3_PKT_END_ALL) {
MPIU_ERR_SETFATALANDJUMP(mpi_errno,MPI_ERR_INTERN, "**ch3|pktarraytoosmall");
}
http://git.mpich.org/mpich.git/commitdiff/0aec805e36a425a24a672ea2d554e016a…
commit 0aec805e36a425a24a672ea2d554e016ade0a024
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Sat Jul 19 15:37:12 2014 -0500
Remove unnecessary typedef.
We were using an enum for packet types and used an int16_t for the
storage. Instead we should directly use the enum as the storage.
Signed-off-by: Wesley Bland <wbland(a)anl.gov>
diff --git a/src/mpid/ch3/include/mpidpkt.h b/src/mpid/ch3/include/mpidpkt.h
index 66c55f2..44a674f 100644
--- a/src/mpid/ch3/include/mpidpkt.h
+++ b/src/mpid/ch3/include/mpidpkt.h
@@ -63,7 +63,7 @@ typedef union {
/* We start with an arbitrarily chosen number (42), to help with
* debugging when a packet type is not initialized or wrongly
* initialized. */
-enum MPIDI_CH3_Pkt_types
+typedef enum
{
MPIDI_CH3_PKT_EAGER_SEND = 42,
#if defined(USE_EAGER_SHORT)
@@ -108,9 +108,8 @@ enum MPIDI_CH3_Pkt_types
# endif
MPIDI_CH3_PKT_END_ALL,
MPIDI_CH3_PKT_INVALID = -1 /* forces a signed enum to quash warnings */
-};
+} MPIDI_CH3_Pkt_type_t;
-typedef int16_t MPIDI_CH3_Pkt_type_t;
typedef uint16_t MPIDI_CH3_Pkt_flags_t;
/* Flag vector bits:*/
http://git.mpich.org/mpich.git/commitdiff/faa37d89d90db3687754045595cd94c31…
commit faa37d89d90db3687754045595cd94c3102650b2
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Sat Jul 19 09:06:34 2014 -0500
Don't start enums with 0.
This is to help with debugging. Zero is too common a value, and is
often set automatically by the system if not initialized. Starting at
a different value helps us catch uninitialized cases more easily.
We pick "42" as our magic number as it is the answer to the ultimate
question of life, the Universe, and everything.
Signed-off-by: Wesley Bland <wbland(a)anl.gov>
diff --git a/src/mpid/ch3/include/mpidpkt.h b/src/mpid/ch3/include/mpidpkt.h
index 9ef4e0b..66c55f2 100644
--- a/src/mpid/ch3/include/mpidpkt.h
+++ b/src/mpid/ch3/include/mpidpkt.h
@@ -60,9 +60,12 @@ typedef union {
*/
/* FIXME: Having predefined names makes it harder to add new message types,
such as different RMA types. */
+/* We start with an arbitrarily chosen number (42), to help with
+ * debugging when a packet type is not initialized or wrongly
+ * initialized. */
enum MPIDI_CH3_Pkt_types
{
- MPIDI_CH3_PKT_EAGER_SEND = 0,
+ MPIDI_CH3_PKT_EAGER_SEND = 42,
#if defined(USE_EAGER_SHORT)
MPIDI_CH3_PKT_EAGERSHORT_SEND,
#endif /* defined(USE_EAGER_SHORT) */
diff --git a/src/mpid/ch3/include/mpidpre.h b/src/mpid/ch3/include/mpidpre.h
index 8ccbc1b..8c3a68e 100644
--- a/src/mpid/ch3/include/mpidpre.h
+++ b/src/mpid/ch3/include/mpidpre.h
@@ -196,8 +196,11 @@ typedef struct MPIDI_VC * MPID_VCR;
# define MPIDI_REQUEST_SEQNUM
#endif
+/* We start with an arbitrarily chosen number (42), to help with
+ * debugging when a packet type is not initialized or wrongly
+ * initialized. */
enum MPIDI_CH3_Lock_states {
- MPIDI_CH3_WIN_LOCK_NONE = 0,
+ MPIDI_CH3_WIN_LOCK_NONE = 42,
MPIDI_CH3_WIN_LOCK_CALLED,
MPIDI_CH3_WIN_LOCK_REQUESTED,
MPIDI_CH3_WIN_LOCK_GRANTED,
@@ -216,8 +219,11 @@ enum MPIDI_Win_info_arg_vals_accumulate_ops {
MPIDI_ACC_OPS_SAME_OP_NO_OP
};
+/* We start with an arbitrarily chosen number (42), to help with
+ * debugging when a packet type is not initialized or wrongly
+ * initialized. */
enum MPIDI_Win_epoch_states {
- MPIDI_EPOCH_NONE = 0,
+ MPIDI_EPOCH_NONE = 42,
MPIDI_EPOCH_FENCE,
MPIDI_EPOCH_POST,
MPIDI_EPOCH_START,
diff --git a/src/mpid/ch3/include/mpidrma.h b/src/mpid/ch3/include/mpidrma.h
index 84bac45..1fd76fa 100644
--- a/src/mpid/ch3/include/mpidrma.h
+++ b/src/mpid/ch3/include/mpidrma.h
@@ -31,9 +31,12 @@ enum MPIDI_RMA_Datatype {
MPIDI_RMA_DATATYPE_DERIVED = 51
};
+/* We start with an arbitrarily chosen number (42), to help with
+ * debugging when a packet type is not initialized or wrongly
+ * initialized. */
enum MPID_Lock_state {
- MPID_LOCK_NONE = 0,
- MPID_LOCK_SHARED_ALL = 1
+ MPID_LOCK_NONE = 42,
+ MPID_LOCK_SHARED_ALL
};
/*
http://git.mpich.org/mpich.git/commitdiff/983df3aeeb6f43046e7f1b569c1ad5881…
commit 983df3aeeb6f43046e7f1b569c1ad5881b14d0b8
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Sat Jul 19 15:33:35 2014 -0500
Clean up commas.
Bad placement of commas was making indent very unhappy.
Signed-off-by: Wesley Bland <wbland(a)anl.gov>
diff --git a/src/mpid/ch3/include/mpidpkt.h b/src/mpid/ch3/include/mpidpkt.h
index 935c03b..9ef4e0b 100644
--- a/src/mpid/ch3/include/mpidpkt.h
+++ b/src/mpid/ch3/include/mpidpkt.h
@@ -97,13 +97,13 @@ enum MPIDI_CH3_Pkt_types
MPIDI_CH3_PKT_GET_ACCUM_RESP,
MPIDI_CH3_PKT_FLOW_CNTL_UPDATE, /* FIXME: Unused */
MPIDI_CH3_PKT_CLOSE,
- MPIDI_CH3_PKT_END_CH3
+ MPIDI_CH3_PKT_END_CH3,
/* The channel can define additional types by defining the value
MPIDI_CH3_PKT_ENUM */
# if defined(MPIDI_CH3_PKT_ENUM)
- , MPIDI_CH3_PKT_ENUM
+ MPIDI_CH3_PKT_ENUM,
# endif
- , MPIDI_CH3_PKT_END_ALL,
+ MPIDI_CH3_PKT_END_ALL,
MPIDI_CH3_PKT_INVALID = -1 /* forces a signed enum to quash warnings */
};
-----------------------------------------------------------------------
Summary of changes:
.../ch3/channels/nemesis/include/mpid_nem_impl.h | 14 -------
.../ch3/channels/nemesis/include/mpidi_ch3_pre.h | 9 +++++
src/mpid/ch3/channels/nemesis/netmod/ib/ib_impl.h | 10 +++---
src/mpid/ch3/channels/nemesis/netmod/ib/ib_poll.c | 4 +-
src/mpid/ch3/channels/nemesis/src/ch3_progress.c | 10 +++---
src/mpid/ch3/channels/nemesis/src/mpid_nem_ckpt.c | 2 +-
src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt.c | 2 +-
src/mpid/ch3/include/mpidpkt.h | 39 ++++++++++----------
src/mpid/ch3/include/mpidpre.h | 10 ++++-
src/mpid/ch3/include/mpidrma.h | 7 +++-
10 files changed, 56 insertions(+), 51 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository annotated tag, v3.1.2, created. v3.1.2
by noreply@mpich.org 21 Jul '14
by noreply@mpich.org 21 Jul '14
21 Jul '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The annotated tag, v3.1.2 has been created
at 0eca09065d1da3c612bfd8f99734ab848ac9ecc7 (tag)
tagging 461431a019a1500e48ec73637b8bbba40cfc0fb8 (commit)
replaces v3.1.1
tagged by Junchao Zhang
on Mon Jul 21 15:55:37 2014 -0500
- Log -----------------------------------------------------------------
tagging 'v3.1.2'
Antonio J. Pena (9):
Added support for thread-safe errno in Solaris
Switched -D_REENTRANT from CFLAGS to CPPFLAGS
Fixed unused variable compiler warnings in ROMIO
Change patch's --forward flag for short equivalent
Revert "Remove MPICXX_NAME and MPICPP_NAME."
Fix support for --program-prefix/-suffix options
Fix weak alias support detection
Fix usage of weak,alias attributes
Remove MPICH_ATTR_WEAK_ALIAS macro
Huiwei Lu (2):
Clean up MPI_Comm_idup code for '--enable-threads=single' case.
Improve checking for C compiler options on Solaris
Junchao Zhang (20):
Ported more F90 tests to F08
Fix bugs in comm_spawn & comm_spawn_multiple
Fix an MPI_Cancel bug in F08
Code cleanup
Fix a bug when converting a Fortran string to a C string
Fix bugs in MPI_Info_get and MPI_Info_get_valuelen
Move F08 hello test and ring test to dir misc
Added a makefile for f08 tests
Revised the handle conversion functions in Fortran.
Set MPIR_CVAR_MAX_STRLEN to a smaller value
Added assertion to protect cvars of type MPI_CHAR
Allocate mem. for a cvar when its type is MPI_CHAR
Increase buffer size to cover longer cvar strings
Added the missing const to the buf arg in MPI_T_pvar/cvar_write
Added a test for MPI_T cvar read and write
Added the missing const in cvar/pvar write
Update RELEASE_NOTES to include PathScale problems
Update CHANGES for 3.1.2 release
Upgraded revison number and release number
Mention BG/Q enhancements in CHANGES
Ken Raffenetti (11):
remove preprocessor guards from nbc tests
fix assert in win_shared_noncontig tests
fixup for [f8c8d5aa]
increase feature level for pread/pwrite
add flag to enable C99 mode with Solaris compilers
allow timeout of zero in bscu_wait_for_completion
remove undeclared cvar check in portals4 netmod
add README section for portals4 netmod
portals4: set VC to active when id initialized
Solaris build fix for non-strict compile
fixup issendselfcancel test
Lisandro Dalcin (1):
Better implementation of MPI_Allreduce for intercommunicator.
Masamichi Takagi (3):
Add on-demand connection management for IB
Free, munmap, destroy on terminating VC
Add IB device name of mlx5_<n>
Michael Blocksome (3):
pamid: create memregions at an offset of the shared memory allocation
pamid: set base addr to NULL if size is zero in win_allocate_shared
pamid: remove blocking shmem mutex; remove shmem CAS/FOP optimizations
Mohamad Chaarawi (1):
ROMIO: big-datatypes: Update overly conservative assertion
Norio Yamaguchi (10):
Add IB device name of qib<n>
Change of the memory area used in put_scratch_pad
Initialize the ringbuf memory for re-use
Replace malloc-free functions when using netmod-IB
Fix header size when transmitting by SendNoncontig
No need to malloc scratch-pad when nranks is 1
Improve on-demand connection management for IB
Fix the management of RDMA-write ringbuffer
white space fixup
Fix build warnings about comparison of pointer
Paul Coffman (11):
Teach GPFS about PE platform
remove BGL_OPTIM_STEP flags from PE Makefile.mk
Teach GPFS-PE about MP_IOAGENT_CNT
added code to check if fd->comm is intercomm then abort
bg and pe to gpfs hints consolidation
migrate ranklist from agents aggregators
clean up resources if P2PContig selected
small memory leak on Blue Gene
resource cleanup in p2pcontig case
BALANCECONTIG cleanups/fixes
memory leak in PE aggregator creation
Pavan Balaji (17):
Ticket #1935 has been closed.
MPI_Status_c2f should also go into libmpi.
Upgraded to hwloc-1.9
Hydra-specific patches for hwloc.
Removed unnecessary unused attributes.
Only create shared memory when more than one process exists.
Add barrier-like semantics in PSCW for shared-memory operations.
Add a memory barrier at the end of the Win_complete function.
Fix badness in fence_shm.
Fix bug in PMI keyval caching logic.
Increase the number of possible PMI arguments.
Use global variable for MPI_PUT operations.
Avoid duplicate win_group_ranks creation
Mark get-struct as an xfail.
Simplified RMA_Op structure.
Revert "Simplified RMA_Op structure."
Add Sangmin to user/install guides.
Rob Latham (19):
Lustre used constants w/o header file
deal better with large user-defined types
additional test case for large datatype i/o
constify string handling
test for RMA with "struct of struct"
ROMIO: some platforms unhappy when passed 2 GiB counts
Revert "Address many of the perf problems in #1788"
do not redefine MIN if provided elsewhere
munmap and shm_unlink prototyped in mman.h
use apropriate enum
Fix up header files in ad_gpfs_open.c
add a descriptive string to function table
set an MPI Info key with the type of file system
ROMIO: report which ranks are aggregators
use 'long' for blocksize
ROMIO debugging: environment var to select fs type
fix unsigned arithmetic yielding unsigned
optionally display ROMIO hints
warning fixes with --enable-strict
Sameh Sharkawi (1):
pamid: Fix for pami_tune parameter parsing
Sangmin Seo (4):
Replaced -Wno-type-limits with -Wtype-limits.
Removed a unnecessary MPIU_Assert.
Add warning about memory tracing overhead.
Add environment variables to control memory tracing overhead.
Su Huang (4):
pamid: fix MPI_Abort hang with dynamic tasking
MPI_Iallgather has no validity check for sendcount
pamid: Data integrity error hit in MPI_Win_allocate_shared windows(LE)
Non-blocking collectives have no validity check for count
Wesley Bland (8):
Improve error checking for buffer aliasing
Add tests for new buffer aliasing checks
Fix coll6 test to use MPI_IN_PLACE when necessary
Add a CVAR to turn off collective alias checking
Fix redscat MPI_IN_PLACE checking
Fix collective alias checks to look for zero-sized buffers
Fix refcounting for isends
Add a test for the bug in #2129
Xin Zhao (11):
fix bug: delete incorrect lines in fetch_and_op.c
Rename static functions in RMA code
Rename RMA request gc and complete function
Separate progress engine code from garbage collection
Simplify RMA requests completion function
Add CVAR (# of completed reqs) to control when to stop in RMA GC function
Add CVAR (# of tested reqs) to control when to stop in RMA GC function
Fix bug: add barrier semantic in FENCE for SHM ops.
Add a test code to test FENCE on SHM.
Notes on when to do mem barriers in RMA.
Add/delete memory barriers in RMA.
-----------------------------------------------------------------------
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-135-g461431a
by noreply@mpich.org 21 Jul '14
by noreply@mpich.org 21 Jul '14
21 Jul '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via 461431a019a1500e48ec73637b8bbba40cfc0fb8 (commit)
from 88e23c46ccedf7643f3aa56c5cb1542eee0efc17 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/461431a019a1500e48ec73637b8bbba40…
commit 461431a019a1500e48ec73637b8bbba40cfc0fb8
Author: Junchao Zhang <jczhang(a)mcs.anl.gov>
Date: Mon Jul 21 15:53:21 2014 -0500
Mention BG/Q enhancements in CHANGES
No review
diff --git a/CHANGES b/CHANGES
index f3185aa..bbcd316 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,12 @@
===============================================================================
Changes in 3.1.2
===============================================================================
+
+ # Significant enhancements to the BG/Q device, especially for RMA and
+ shared memory functionality.
+
+ # Several enhancements to ROMIO.
+
# Upgraded to hwloc-1.9.
# Added more Fortran 2008 (F08) tests and fixed a few F08 binding bugs.
@@ -8,9 +14,7 @@
# Updated weak alias support to align with gcc-4.x
- # Enhancements to RMA implementation.
-
- # Enhancements to ROMIO.
+ # Minor enhancements to the CH3 RMA implementation.
# Better implementation of MPI_Allreduce for intercommunicator.
@@ -18,7 +22,8 @@
# Added flags to enable C99 mode with Solaris compilers.
- # Updated implementation of MPI-T CVARs of type MPI_CHAR, as interpreted in MPI-3.0 Errata.
+ # Updated implementation of MPI-T CVARs of type MPI_CHAR, as interpreted
+ in MPI-3.0 Errata.
# Several other minor bug fixes, memory leak fixes, and code cleanup.
-----------------------------------------------------------------------
Summary of changes:
CHANGES | 13 +++++++++----
1 files changed, 9 insertions(+), 4 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository annotated tag, v3.1.2, deleted. v3.1.1-134-g88e23c4
by noreply@mpich.org 21 Jul '14
by noreply@mpich.org 21 Jul '14
21 Jul '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The annotated tag, v3.1.2 has been deleted
was a4921c1e5f2cd644c9e688902eab8d5d95bca4e6
-----------------------------------------------------------------------
tag v3.1.2
tagging 'v3.1.2'
88e23c46ccedf7643f3aa56c5cb1542eee0efc17 Upgraded revison number and release number
-----------------------------------------------------------------------
hooks/post-receive
--
MPICH primary repository
1
0