diff --git a/src/mca/ptl/elan/Makefile.am b/src/mca/ptl/elan/Makefile.am index 6bc49505a3..1820e31d0f 100644 --- a/src/mca/ptl/elan/Makefile.am +++ b/src/mca/ptl/elan/Makefile.am @@ -10,7 +10,7 @@ AM_CPPFLAGS = -I$(top_ompi_builddir)/src/include \ -I$(top_ompi_srcdir)/src -I$(top_ompi_srcdir)/src/include \ -I/usr/lib/qsnet/elan4/include -SUBDIRS = src +SUBDIRS = src tests EXTRA_DIST = VERSION diff --git a/src/mca/ptl/elan/configure.params b/src/mca/ptl/elan/configure.params index 4fd4145438..c8621dfb63 100644 --- a/src/mca/ptl/elan/configure.params +++ b/src/mca/ptl/elan/configure.params @@ -7,5 +7,5 @@ PARAM_INIT_FILE=src/ptl_elan.c PARAM_CONFIG_HEADER_FILE="src/elan_config.h" -PARAM_CONFIG_FILES="Makefile src/Makefile" +PARAM_CONFIG_FILES="Makefile src/Makefile tests/Makefile" PARAM_WANT_CXX=no diff --git a/src/mca/ptl/elan/configure.stub b/src/mca/ptl/elan/configure.stub index ce86dfcc59..a4045d2872 100644 --- a/src/mca/ptl/elan/configure.stub +++ b/src/mca/ptl/elan/configure.stub @@ -56,6 +56,8 @@ AC_DEFUN([MCA_CONFIGURE_STUB],[ CPPFLAGS="-I${QSNET2SRC}/include -I${QSNET2SRC}/elan4lib/include -I${QSNET2SRC}/elan4lib/elan4 -I${QSNET2SRC}/elan4lib/common" fi + AC_SUBST(LIBS) + AC_SUBST(CPPFLAGS) AC_SUBST(QSNET2SRC) ])dnl diff --git a/src/mca/ptl/elan/tests/Makefile.am b/src/mca/ptl/elan/tests/Makefile.am new file mode 100644 index 0000000000..7717932cb7 --- /dev/null +++ b/src/mca/ptl/elan/tests/Makefile.am @@ -0,0 +1,30 @@ +# -*- makefile -*- +# +# $HEADER$ +# + +include $(top_ompi_srcdir)/config/Makefile.options + +AM_CPPFLAGS = -I$(top_ompi_builddir)/src/include \ + -I$(top_ompi_srcdir)/src -I$(top_ompi_srcdir)/src/include \ + -I../src -I../.. -I../../tcp/base \ + -I/usr/lib/qsnet/elan4/include + +LDFLAGS += -L$(prefix)/lib -L../src/.libs + +EXECS = qsnet_init qsnet_qdma qsnet_rdma + +units: $(EXECS) + +qsnet_init: qsnet_init.c + $(CC) $(AM_CPPFLAGS) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) -lmpi -pthread -lm -lmca_ptl_elan + +qsnet_qdma: qsnet_qdma.c + $(CC) $(AM_CPPFLAGS) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) -lmpi -pthread -lm -lmca_ptl_elan + +qsnet_rdma: qsnet_rdma.c + $(CC) $(AM_CPPFLAGS) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) -lmpi -pthread -lm -lmca_ptl_elan + + +clean: + -rm -rf $(EXECS) diff --git a/src/mca/ptl/elan/tests/qsnet_init.c b/src/mca/ptl/elan/tests/qsnet_init.c index 4427cf3f1d..72342f477b 100644 --- a/src/mca/ptl/elan/tests/qsnet_init.c +++ b/src/mca/ptl/elan/tests/qsnet_init.c @@ -3,271 +3,21 @@ #include "ptl_elan_priv.h" extern mca_ptl_elan_module_1_0_0_t mca_ptl_elan_module; - int main (int argc, char ** argv) { + bool allow_threads; + bool have_hidden_threads; + int input; + int num; + /* Initialization test */ - ompi_mca_ptl_elan_init (&mca_ptl_elan_module); - - /* Please add a barrier at the beginning */ - - /* Please add a barrier at the end */ - - /* Finalize the device */ - ompi_mca_ptl_elan_finalize (&mca_ptl_elan_module); + mca_ptl_elan_module_open(); + mca_ptl_elan_module_init(&num, &allow_threads, &have_hidden_threads); + mca_ptl_elan_module_control(1, &input, 4); + mca_ptl_elan_module_close(); /* Tell alive */ fprintf(stdout, "I am still alive\n"); fflush(stdout); return 0; } - -int test_qdma(mca_ptl_elan_module_1_0_0_t *emp, int reps) -{ - uint64_t start0, end0; - double t; - int r; - - r = reps; - ELAN4_CTX *ctx; - RAIL *rail; - mca_ptl_elan_t *ptl; - - ptl = emp->elan_ptls[0]; - ctx = emp->ems->elan_ctx; - rail = (RAIL *) emp->ems->elan_rail[0]; - - start0 = elan4_clock(ctx); - - if (0 != ptl->elan_vp) { - r--; - /*elan_queueRxWait(qr,rbuf,waitType);*/ - ptl_elan_queue_recv(); - } - - while (--r >= 0) { - /* Trigger a send event */ - ptl_elan_queue_send(); - - if ( (&qm->qm_event)->e_state == EVENT_LIVE_LIVE ) - (*(&qm->qm_event)->waitFn) (&qm->qm_event, ELAN_POLL_EVENT); - (*(&qm->qm_event)->freeFn)(&qm->qm_event); - - /* Wait for a receive event to come by */ - /*elan_queueRxWait(qr,rbuf,waitType);*/ - ptl_elan_queue_recv(); - } - - if (0 != ptl->elan_vp) { - - /* Trigger a send event */ - ptl_elan_queue_send(); - - if ( (&qm->qm_event)->e_state == EVENT_LIVE_LIVE ) - (*(&qm->qm_event)->waitFn) (&qm->qm_event, ELAN_POLL_EVENT); - (*(&qm->qm_event)->freeFn)(&qm->qm_event); - } - - end0 = elan4_clock(ctx); - nsec = ((end0 - start0) / reps); - t = ((double) nsec)/(2*1000.0); - - return(0); -} - -ptl_elan_queue_send() { - - QUEUE_TX_CTRL *qc = (QUEUE_TX_CTRL *)qt; - QUEUE_TX_RAIL *qr; - QUEUE_TX_MAIN *qm; - - /* XXX: Cache eviction */ - PRINTF5(qc->qc_state, DBG_QUEUE, - "elan_queueTx(%p): destvp %d req=%p size=%d rail=%d\n", - qc, destvp, req, size, rail); - - if ( rail == ELAN_RAIL_ALL ) - rail = 0; - - qr = &qc->qc_qr[rail]; - if ((qm = (QUEUE_TX_MAIN *)_elan_caAcquire(&qr->qr_ca))==NULL) - elan_exception(qc->qc_state, ELAN_ENOMEM, - "elan_queueTx(): Failed to allocate descriptor"); - - /*qm = list_entry(qm,QUEUE_TX_MAIN, qm_event);*/ - - qm = ptl_elan_init_event(); - - if ( size ) { - - if ( testFlag (qc->qc_flags, LIBELAN_QUEUEREUSEBUF) ) - { - /* The current API allows the req buffer to be re-used on - * return if this flag is set. - */ - memcpy(&qm[1], req, size); - - qm->qm_dma.dma_srcAddr = MAIN2ELAN(qr->qr_rail->r_ctx, &qm[1]); - - } else { - qm->qm_dma.dma_srcAddr = MAIN2ELAN(qr->qr_rail->r_ctx, req); - } - } - - /* XXXX Hardwired DMA retry count */ - - qm->qm_dma.dma_typeSize = E4_DMA_TYPE_SIZE(size, - DMA_DataTypeByte, DMA_QueueWrite, 16); - qm->qm_dma.dma_cookie = elan4_local_cookie(qr->qr_cpool, - E4_COOKIE_TYPE_LOCAL_DMA, destvp); - qm->qm_dma.dma_vproc = destvp; - - ompi_output(0, - "elan_queueTx(%p): DMA: typeSize %Lx vproc %lx srcAddr %Lx " - "dstAddr %Lx srcEvent %Lx dstEvent %Lx\n", - qc, - qm->qm_dma.dma_typeSize, - qm->qm_dma.dma_vproc, - qm->qm_dma.dma_srcAddr, - qm->qm_dma.dma_dstAddr, - qm->qm_dma.dma_srcEvent, - qm->qm_dma.dma_dstEvent); - - /* Make main memory coherent with IO domain (IA64) */ - MEMBAR_VISIBLE(); - - elan4_run_dma_cmd(qr->qr_cmdq, (DMA *)&qm->qm_dma); - qr->qr_cmdq->cmdq_flush (qr->qr_cmdq); - - ELAN_EVENT_PRIME(&qm->qm_event); - ompi_output(0, "elan_queueTx(%p) returning %p\n", qc, qm); - - /* Poll whole chain starting at head */ - /* See its initiation in _elan_queueTxDescInit(); - * Look for _elan_queueTxPoll(): _elan_queueTxWait(): - * and _elan_queueTxFree(); */ - - return Event; -} - -/* This function needs no event related knowledge */ -void ptl_elan_queue_recv () -{ - QUEUE_RX_CTRL *qc = (QUEUE_RX_CTRL *)qrx; - int i; - - MUTEX_LOCK(&qc->qc_mutex); - - if ( qc->qc_lastUsed != NULL ) - _elan_queueRxComplete(qrx); - - if ( qc->qc_nrails == 1 ) { - QUEUE_RX_RAIL *qr = qc->qc_qr[0]; - - /* Call the libelan4 wait code directly passing the qr_cmdq - * not the es_cq as there is a pending wait(-32) in the qr_cq - * and the elan4 wait code does a wait(0) which must not - * overtake the wait(-32) or else we don't block when we - * should causing premature wakeups - */ - elan4_waitevent_word(qr->qr_rail->r_ctx, qr->qr_cmdq, - qr->qr_es->es_ecmdq, qr->qr_es->es_cmdBlk, - qr->qr_es->es_cookie, qr->qr_qEvent, - &qr->qr_doneWord, waitType); - - qc->qc_lastUsed = qr; - - if ( buf != NULL ) { - - QUEUE_RX_CTRL *qc = (QUEUE_RX_CTRL *)qrx; - QUEUE_RX_RAIL *qr = qc->qc_lastUsed; - RAIL *rail; - - memcpy(buf, qr->qr_fptr, qc->qc_bufSize); - - /*_elan_queueRxComplete(qrx);*/ - if ( ! qr ) - return; - - rail = qr->qr_rail; - -#ifdef DEBUG - memset(qr->qr_fptr, 0xfe, qc->qc_slotSize); - //MEMBAR_STORESTORE(); -#endif - - /* Work out the new front pointer */ - if (qr->qr_fptr == qr->qr_top) { - qr->qr_fptr = qr->qr_base; - qr->qr_efptr = qr->qr_efitem; - } else { - qr->qr_fptr = (void *)((uintptr_t)qr->qr_fptr - + qc->qc_slotSize); - qr->qr_efptr += qc->qc_slotSize; - } - - /* PCI Write */ - qc->qc_q->q_fptr = qr->qr_efptr; - MEMBAR_STORESTORE(); - - /* Reset the event */ - RESETEVENT_WORD(&qr->qr_doneWord); - - /* Order RESETEVENT wrt to wait_event_cmd */ - MEMBAR_STORESTORE(); - - /* Re-prime queue event by issuing a waitevent(1) on it */ - elan4_wait_event_cmd(qr->qr_cmdq, - MAIN2ELAN(rail->r_ctx, &qr->qr_elan->qe_done), - E4_EVENT_INIT_VALUE(-32, E4_EVENT_WRITE, - E4_EVENT_DTYPE_LONG, 0), - MAIN2ELAN(rail->r_ctx, (void *) &qr->qr_doneWord), - 0xfeedfacedeadbeef); - - qr->qr_cmdq->cmdq_flush (qr->qr_cmdq); - qc->qc_lastUsed = NULL; - MUTEX_UNLOCK(&qc->qc_mutex); - return buf; - } else { - MUTEX_UNLOCK(&qc->qc_mutex); - return qr->qr_fptr; - } - } - return ; -} - -int ptl_elan_init_event() { - - QUEUE_TX_RAIL *qr = (QUEUE_TX_RAIL *)handle; - QUEUE_TX_MAIN *qm = list_entry(main,QUEUE_TX_MAIN,qm_event); - - if (ELAN_MISALIGNED (offsetof(QUEUE_TX_ELAN, qe_done), EVENT_ALIGN)) { - elan_exception (state, ELAN_EINTERNAL, - "Bad QUEUE_TX_ELAN done event alignment (%d)", - offsetof(QUEUE_TX_ELAN, qe_done)); - } - - /* Zero this descriptor */ - memset(qm,0,sizeof(QUEUE_TX_MAIN)); - - qm->qm_elan = elanAddr; - qm->qm_event.handle = handle; - - /* Initialise event desc */ - qm->qm_event.pollFn = _elan_queueTxPoll; - qm->qm_event.waitFn = _elan_queueTxWait; - qm->qm_event.freeFn = _elan_queueTxFree; - - qm->qm_dma.dma_dstAddr = 0; - qm->qm_dma.dma_srcEvent = SDRAM2ELAN(rail->r_ctx, - &qm->qm_elan->qe_done); - qm->qm_dma.dma_dstEvent = SDRAM2ELAN(rail->r_ctx, qr->qr_q); - - INITEVENT_WORD(qr->qr_rail->r_ctx, - (EVENT *)&qm->qm_elan->qe_done, &qm->qm_doneWord); - - RESETEVENT_WORD(&qm->qm_doneWord); - PRIMEEVENT_WORD(qr->qr_rail->r_ctx, - (EVENT *)&qm->qm_elan->qe_done, 1); - return true; -} diff --git a/src/mca/ptl/elan/tests/qsnet_qdma.c b/src/mca/ptl/elan/tests/qsnet_qdma.c index 6d7b0ee40b..f15cc69401 100644 --- a/src/mca/ptl/elan/tests/qsnet_qdma.c +++ b/src/mca/ptl/elan/tests/qsnet_qdma.c @@ -1,11 +1,10 @@ - #include "qsnet/fence.h" #include "ptl_elan.h" #include "ptl_elan_priv.h" extern mca_ptl_elan_module_1_0_0_t mca_ptl_elan_module; -int test_qdma(mca_ptl_elan_module_1_0_0_t *emp); +int test_qdma(mca_ptl_elan_module_1_0_0_t *emp, int reps); int ptl_elan_init_event(); int ptl_elan_free_event(); @@ -20,12 +19,14 @@ int main (int argc, char ** argv) /* Initialization test */ ompi_mca_ptl_elan_init (&mca_ptl_elan_module); - /* Please add a barrier at the beginning */ -#if 0 - test_qdma(&mca_ptl_elan_module); -#endif + /* Please replace with a barrier at the beginning */ - /* Please add a barrier at the end */ + sleep(5); /* Sleep 5 seconds for others to catch up */ + + test_qdma(&mca_ptl_elan_module, 1); + + /* Please replace with a barrier at the end */ + sleep(5); /* Sleep 5 seconds for others to catch up */ /* Finalize the device */ ompi_mca_ptl_elan_finalize (&mca_ptl_elan_module); @@ -41,15 +42,16 @@ int test_qdma(mca_ptl_elan_module_1_0_0_t *emp, int reps) uint64_t start0, end0; double t; int r; + double nsec; - r = reps; ELAN4_CTX *ctx; RAIL *rail; mca_ptl_elan_t *ptl; + r = reps; ptl = emp->elan_ptls[0]; - ctx = emp->ems->elan_ctx; - rail = (RAIL *) emp->ems->elan_rail[0]; + ctx = emp->elan_ctrl->elan_ctx; + rail = (RAIL *) emp->elan_ctrl->elan_rail[0]; start0 = elan4_clock(ctx); @@ -62,24 +64,12 @@ int test_qdma(mca_ptl_elan_module_1_0_0_t *emp, int reps) while (--r >= 0) { /* Trigger a send event */ ptl_elan_queue_send(); - - if ( (&qm->qm_event)->e_state == EVENT_LIVE_LIVE ) - (*(&qm->qm_event)->waitFn) (&qm->qm_event, ELAN_POLL_EVENT); - (*(&qm->qm_event)->freeFn)(&qm->qm_event); - - /* Wait for a receive event to come by */ - /*elan_queueRxWait(qr,rbuf,waitType);*/ ptl_elan_queue_recv(); } if (0 != ptl->elan_vp) { - - /* Trigger a send event */ + /* Trigger one more send */ ptl_elan_queue_send(); - - if ( (&qm->qm_event)->e_state == EVENT_LIVE_LIVE ) - (*(&qm->qm_event)->waitFn) (&qm->qm_event, ELAN_POLL_EVENT); - (*(&qm->qm_event)->freeFn)(&qm->qm_event); } end0 = elan4_clock(ctx); @@ -89,199 +79,17 @@ int test_qdma(mca_ptl_elan_module_1_0_0_t *emp, int reps) return(0); } -ptl_elan_queue_send() { - - QUEUE_TX_CTRL *qc = (QUEUE_TX_CTRL *)qt; - QUEUE_TX_RAIL *qr; - QUEUE_TX_MAIN *qm; - - /* XXX: Cache eviction */ - PRINTF5(qc->qc_state, DBG_QUEUE, - "elan_queueTx(%p): destvp %d req=%p size=%d rail=%d\n", - qc, destvp, req, size, rail); - - if ( rail == ELAN_RAIL_ALL ) - rail = 0; - - qr = &qc->qc_qr[rail]; - if ((qm = (QUEUE_TX_MAIN *)_elan_caAcquire(&qr->qr_ca))==NULL) - elan_exception(qc->qc_state, ELAN_ENOMEM, - "elan_queueTx(): Failed to allocate descriptor"); - - /*qm = list_entry(qm,QUEUE_TX_MAIN, qm_event);*/ - - qm = ptl_elan_init_event(); - - if ( size ) { - - if ( testFlag (qc->qc_flags, LIBELAN_QUEUEREUSEBUF) ) - { - /* The current API allows the req buffer to be re-used on - * return if this flag is set. - */ - memcpy(&qm[1], req, size); - - qm->qm_dma.dma_srcAddr = MAIN2ELAN(qr->qr_rail->r_ctx, &qm[1]); - - } else { - qm->qm_dma.dma_srcAddr = MAIN2ELAN(qr->qr_rail->r_ctx, req); - } - } - - /* XXXX Hardwired DMA retry count */ - - qm->qm_dma.dma_typeSize = E4_DMA_TYPE_SIZE(size, - DMA_DataTypeByte, DMA_QueueWrite, 16); - qm->qm_dma.dma_cookie = elan4_local_cookie(qr->qr_cpool, - E4_COOKIE_TYPE_LOCAL_DMA, destvp); - qm->qm_dma.dma_vproc = destvp; - - ompi_output(0, - "elan_queueTx(%p): DMA: typeSize %Lx vproc %lx srcAddr %Lx " - "dstAddr %Lx srcEvent %Lx dstEvent %Lx\n", - qc, - qm->qm_dma.dma_typeSize, - qm->qm_dma.dma_vproc, - qm->qm_dma.dma_srcAddr, - qm->qm_dma.dma_dstAddr, - qm->qm_dma.dma_srcEvent, - qm->qm_dma.dma_dstEvent); - - /* Make main memory coherent with IO domain (IA64) */ - MEMBAR_VISIBLE(); - - elan4_run_dma_cmd(qr->qr_cmdq, (DMA *)&qm->qm_dma); - qr->qr_cmdq->cmdq_flush (qr->qr_cmdq); - - ELAN_EVENT_PRIME(&qm->qm_event); - ompi_output(0, "elan_queueTx(%p) returning %p\n", qc, qm); - - /* Poll whole chain starting at head */ - /* See its initiation in _elan_queueTxDescInit(); - * Look for _elan_queueTxPoll(): _elan_queueTxWait(): - * and _elan_queueTxFree(); */ - - return Event; +int ptl_elan_queue_send() { + return OMPI_SUCCESS; } /* This function needs no event related knowledge */ -void ptl_elan_queue_recv () +int ptl_elan_queue_recv () { - QUEUE_RX_CTRL *qc = (QUEUE_RX_CTRL *)qrx; - int i; - - MUTEX_LOCK(&qc->qc_mutex); - - if ( qc->qc_lastUsed != NULL ) - _elan_queueRxComplete(qrx); - - if ( qc->qc_nrails == 1 ) { - QUEUE_RX_RAIL *qr = qc->qc_qr[0]; - - /* Call the libelan4 wait code directly passing the qr_cmdq - * not the es_cq as there is a pending wait(-32) in the qr_cq - * and the elan4 wait code does a wait(0) which must not - * overtake the wait(-32) or else we don't block when we - * should causing premature wakeups - */ - elan4_waitevent_word(qr->qr_rail->r_ctx, qr->qr_cmdq, - qr->qr_es->es_ecmdq, qr->qr_es->es_cmdBlk, - qr->qr_es->es_cookie, qr->qr_qEvent, - &qr->qr_doneWord, waitType); - - qc->qc_lastUsed = qr; - - if ( buf != NULL ) { - - QUEUE_RX_CTRL *qc = (QUEUE_RX_CTRL *)qrx; - QUEUE_RX_RAIL *qr = qc->qc_lastUsed; - RAIL *rail; - - memcpy(buf, qr->qr_fptr, qc->qc_bufSize); - - /*_elan_queueRxComplete(qrx);*/ - if ( ! qr ) - return; - - rail = qr->qr_rail; - -#ifdef DEBUG - memset(qr->qr_fptr, 0xfe, qc->qc_slotSize); - //MEMBAR_STORESTORE(); -#endif - - /* Work out the new front pointer */ - if (qr->qr_fptr == qr->qr_top) { - qr->qr_fptr = qr->qr_base; - qr->qr_efptr = qr->qr_efitem; - } else { - qr->qr_fptr = (void *)((uintptr_t)qr->qr_fptr - + qc->qc_slotSize); - qr->qr_efptr += qc->qc_slotSize; - } - - /* PCI Write */ - qc->qc_q->q_fptr = qr->qr_efptr; - MEMBAR_STORESTORE(); - - /* Reset the event */ - RESETEVENT_WORD(&qr->qr_doneWord); - - /* Order RESETEVENT wrt to wait_event_cmd */ - MEMBAR_STORESTORE(); - - /* Re-prime queue event by issuing a waitevent(1) on it */ - elan4_wait_event_cmd(qr->qr_cmdq, - MAIN2ELAN(rail->r_ctx, &qr->qr_elan->qe_done), - E4_EVENT_INIT_VALUE(-32, E4_EVENT_WRITE, - E4_EVENT_DTYPE_LONG, 0), - MAIN2ELAN(rail->r_ctx, (void *) &qr->qr_doneWord), - 0xfeedfacedeadbeef); - - qr->qr_cmdq->cmdq_flush (qr->qr_cmdq); - qc->qc_lastUsed = NULL; - MUTEX_UNLOCK(&qc->qc_mutex); - return buf; - } else { - MUTEX_UNLOCK(&qc->qc_mutex); - return qr->qr_fptr; - } - } - return ; + return OMPI_SUCCESS; } -int ptl_elan_init_event() { - - QUEUE_TX_RAIL *qr = (QUEUE_TX_RAIL *)handle; - QUEUE_TX_MAIN *qm = list_entry(main,QUEUE_TX_MAIN,qm_event); - - if (ELAN_MISALIGNED (offsetof(QUEUE_TX_ELAN, qe_done), EVENT_ALIGN)) { - elan_exception (state, ELAN_EINTERNAL, - "Bad QUEUE_TX_ELAN done event alignment (%d)", - offsetof(QUEUE_TX_ELAN, qe_done)); - } - - /* Zero this descriptor */ - memset(qm,0,sizeof(QUEUE_TX_MAIN)); - - qm->qm_elan = elanAddr; - qm->qm_event.handle = handle; - - /* Initialise event desc */ - qm->qm_event.pollFn = _elan_queueTxPoll; - qm->qm_event.waitFn = _elan_queueTxWait; - qm->qm_event.freeFn = _elan_queueTxFree; - - qm->qm_dma.dma_dstAddr = 0; - qm->qm_dma.dma_srcEvent = SDRAM2ELAN(rail->r_ctx, - &qm->qm_elan->qe_done); - qm->qm_dma.dma_dstEvent = SDRAM2ELAN(rail->r_ctx, qr->qr_q); - - INITEVENT_WORD(qr->qr_rail->r_ctx, - (EVENT *)&qm->qm_elan->qe_done, &qm->qm_doneWord); - - RESETEVENT_WORD(&qm->qm_doneWord); - PRIMEEVENT_WORD(qr->qr_rail->r_ctx, - (EVENT *)&qm->qm_elan->qe_done, 1); - return true; +int ptl_elan_init_event() +{ + return OMPI_SUCCESS; } diff --git a/src/mca/ptl/elan/tests/qsnet_rdma.c b/src/mca/ptl/elan/tests/qsnet_rdma.c index 00793113d4..4228feede1 100644 --- a/src/mca/ptl/elan/tests/qsnet_rdma.c +++ b/src/mca/ptl/elan/tests/qsnet_rdma.c @@ -4,19 +4,20 @@ extern mca_ptl_elan_module_1_0_0_t mca_ptl_elan_module; -int test_rdma(mca_ptl_elan_module_1_0_0_t *emp); +int test_rdma(mca_ptl_elan_module_1_0_0_t *emp, int reps); int main (int argc, char ** argv) { /* Initialization test */ ompi_mca_ptl_elan_init (&mca_ptl_elan_module); - /* Please add a barrier at the beginning */ -#if 0 - test_rdma(&mca_ptl_elan_module); -#endif + /* Please replace with a barrier at the beginning */ + sleep(5); /* Sleep 5 seconds for others to catch up */ - /* Please add a barrier at the end */ + test_rdma(&mca_ptl_elan_module, 1); + + /* Please replace with a barrier at the end */ + sleep(5); /* Sleep 5 seconds for others to catch up */ /* Finalize the device */ ompi_mca_ptl_elan_finalize (&mca_ptl_elan_module); @@ -29,6 +30,6 @@ int main (int argc, char ** argv) int test_rdma(mca_ptl_elan_module_1_0_0_t *emp, int reps) { - /* To test rdma (put/get) function */ + /* TODO: To test rdma (put/get) function */ return 0; }