diff --git a/src/mca/ptl/elan/src/ptl_elan.c b/src/mca/ptl/elan/src/ptl_elan.c index 0e2ba02568..d568b08fd0 100644 --- a/src/mca/ptl/elan/src/ptl_elan.c +++ b/src/mca/ptl/elan/src/ptl_elan.c @@ -305,6 +305,10 @@ mca_ptl_elan_put (struct mca_ptl_base_module_t *ptl, (struct mca_ptl_elan_peer_t *)ptl_peer, sendreq, offset, &size, flags); + /* XXX: It is very important to update offset, + * otherwise, you stuck */ + sendreq->req_offset += size; + /* Update all the sends until the put is done */ END_FUNC(PTL_ELAN_DEBUG_PUT); return rc; diff --git a/src/mca/ptl/elan/src/ptl_elan_comm_init.c b/src/mca/ptl/elan/src/ptl_elan_comm_init.c index 0a2da492a6..3fa046a54b 100644 --- a/src/mca/ptl/elan/src/ptl_elan_comm_init.c +++ b/src/mca/ptl/elan/src/ptl_elan_comm_init.c @@ -107,27 +107,29 @@ ompi_init_elan_queue_events (mca_ptl_elan_module_t * ptl, static void mca_ptl_elan_putget_desc_contruct ( - ELAN4_CTX *ctx, + mca_ptl_elan_module_t * ptl, ompi_ptl_elan_putget_desc_t *desc, EVENT *elan_event, E4_Addr src_elan4_addr, E4_Addr dst_elan4_addr, int local /* dma_src is local */ ) { - /* Zero this descriptor */ - memset(desc, 0, sizeof(desc)); + ELAN4_CTX *ctx, + ctx = ptl->ptl_elan_ctx; + memset(desc, 0, sizeof(desc)); + desc->ptl = ptl; + desc->req = NULL; desc->main_dma.dma_typeSize = 0; desc->main_dma.dma_cookie = 0; desc->main_dma.dma_vproc = 0; - desc->elan_event = elan_event; desc->chain_event= (E4_Event32 *) ((char *)elan_event + sizeof (E4_Event32)); desc->chain_buff = (E4_Addr *) ((char *)elan_event + 2*sizeof (E4_Event32)); - /* Remember all the address needs to be converted + /* XXX: Remember all the address needs to be converted * before assigning to DMA descritpor */ desc->main_dma.dma_srcAddr = src_elan4_addr; desc->main_dma.dma_dstAddr = dst_elan4_addr; @@ -138,6 +140,7 @@ mca_ptl_elan_putget_desc_contruct ( desc->main_dma.dma_dstEvent = elan4_main2elan(ctx, elan_event); } + /* XXX: Remember to reset all event and doneWord */ INITEVENT_WORD (ctx, elan_event, &desc->main_doneWord); RESETEVENT_WORD (&desc->main_doneWord); PRIMEEVENT_WORD (ctx, elan_event, 1); diff --git a/src/mca/ptl/elan/src/ptl_elan_frag.c b/src/mca/ptl/elan/src/ptl_elan_frag.c index 91f174d90f..8a98ec55f7 100644 --- a/src/mca/ptl/elan/src/ptl_elan_frag.c +++ b/src/mca/ptl/elan/src/ptl_elan_frag.c @@ -179,12 +179,6 @@ mca_ptl_elan_send_desc_done ( ptl = ((ompi_ptl_elan_qdma_desc_t *)desc->desc)->ptl; header = &desc->frag_base.frag_header; - LOG_PRINT(PTL_ELAN_DEBUG_MAC, - "[comp send] type %d flag %d size %d\n", - header->hdr_common.hdr_type, - header->hdr_common.hdr_flags, - header->hdr_common.hdr_size); - if(NULL == req) { /* An ack descriptor */ OMPI_FREE_LIST_RETURN (&ptl->queue->tx_desc_free, (ompi_list_item_t *) desc); @@ -194,24 +188,11 @@ mca_ptl_elan_send_desc_done ( & MCA_PTL_FLAGS_ACK_MATCHED) || mca_pml_base_send_request_matched(req)) { - LOG_PRINT(PTL_ELAN_DEBUG_ACK, - "returning req %p mpi_done %d pml_done %d \n", - req, - req->req_base.req_mpi_done, - req->req_base.req_pml_done); - - if(fetchNset (&desc->frag_progressed, 1) == 0) { ptl->super.ptl_send_progress(ptl, req, header->hdr_frag.hdr_frag_length); } - LOG_PRINT(PTL_ELAN_DEBUG_ACK, - "returning req %p mpi_done %d pml_done %d \n", - req, - req->req_base.req_mpi_done, - req->req_base.req_pml_done); - /* Return a frag or if not cached, or it is a follow up */ if ( /*(header->hdr_frag.hdr_frag_offset != 0) || */ diff --git a/src/mca/ptl/elan/src/ptl_elan_priv.c b/src/mca/ptl/elan/src/ptl_elan_priv.c index 4bf9372deb..a8188b5794 100644 --- a/src/mca/ptl/elan/src/ptl_elan_priv.c +++ b/src/mca/ptl/elan/src/ptl_elan_priv.c @@ -716,11 +716,10 @@ mca_ptl_elan_update_desc (mca_ptl_elan_component_t * emp) if (rc) { struct ompi_ptl_elan_base_desc_t *basic; - /* Remove the desc, update the request, put back to free list */ + /* Remove the desc, update the request, return to free list */ frag = (mca_ptl_elan_send_frag_t *) ompi_list_remove_first (&ptl->send_frags); basic = (ompi_ptl_elan_qdma_desc_t*)frag->desc; - mca_ptl_elan_send_desc_done (frag, basic->req); INITEVENT_WORD (ctx, basic->elan_event, &basic->main_doneWord); RESETEVENT_WORD (&basic->main_doneWord); diff --git a/src/mca/ptl/elan/src/ptl_elan_priv.h b/src/mca/ptl/elan/src/ptl_elan_priv.h index ea4db3a1c6..8267208e75 100644 --- a/src/mca/ptl/elan/src/ptl_elan_priv.h +++ b/src/mca/ptl/elan/src/ptl_elan_priv.h @@ -336,7 +336,6 @@ int mca_ptl_elan_wait_desc(mca_ptl_elan_send_frag_t *desc); /* control, synchronization and state prototypes */ int mca_ptl_elan_drain_recv(mca_ptl_elan_component_t *emp); int mca_ptl_elan_update_desc(mca_ptl_elan_component_t *emp); -int mca_ptl_elan_update_putget(mca_ptl_elan_component_t * emp); /** * utility routines for parameter registration */