Check in fixes for offset update to have pml_done and mpi_done to be set correctly
This commit was SVN r2208.
Этот коммит содержится в:
родитель
e74432addf
Коммит
8ff450f0ee
@ -305,6 +305,10 @@ mca_ptl_elan_put (struct mca_ptl_base_module_t *ptl,
|
|||||||
(struct mca_ptl_elan_peer_t *)ptl_peer,
|
(struct mca_ptl_elan_peer_t *)ptl_peer,
|
||||||
sendreq, offset, &size, flags);
|
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 */
|
/* Update all the sends until the put is done */
|
||||||
END_FUNC(PTL_ELAN_DEBUG_PUT);
|
END_FUNC(PTL_ELAN_DEBUG_PUT);
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -107,27 +107,29 @@ ompi_init_elan_queue_events (mca_ptl_elan_module_t * ptl,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
mca_ptl_elan_putget_desc_contruct (
|
mca_ptl_elan_putget_desc_contruct (
|
||||||
ELAN4_CTX *ctx,
|
mca_ptl_elan_module_t * ptl,
|
||||||
ompi_ptl_elan_putget_desc_t *desc,
|
ompi_ptl_elan_putget_desc_t *desc,
|
||||||
EVENT *elan_event,
|
EVENT *elan_event,
|
||||||
E4_Addr src_elan4_addr,
|
E4_Addr src_elan4_addr,
|
||||||
E4_Addr dst_elan4_addr,
|
E4_Addr dst_elan4_addr,
|
||||||
int local /* dma_src is local */ )
|
int local /* dma_src is local */ )
|
||||||
{
|
{
|
||||||
/* Zero this descriptor */
|
ELAN4_CTX *ctx,
|
||||||
memset(desc, 0, sizeof(desc));
|
|
||||||
|
|
||||||
|
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_typeSize = 0;
|
||||||
desc->main_dma.dma_cookie = 0;
|
desc->main_dma.dma_cookie = 0;
|
||||||
desc->main_dma.dma_vproc = 0;
|
desc->main_dma.dma_vproc = 0;
|
||||||
|
|
||||||
desc->elan_event = elan_event;
|
desc->elan_event = elan_event;
|
||||||
desc->chain_event= (E4_Event32 *)
|
desc->chain_event= (E4_Event32 *)
|
||||||
((char *)elan_event + sizeof (E4_Event32));
|
((char *)elan_event + sizeof (E4_Event32));
|
||||||
desc->chain_buff = (E4_Addr *)
|
desc->chain_buff = (E4_Addr *)
|
||||||
((char *)elan_event + 2*sizeof (E4_Event32));
|
((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 */
|
* before assigning to DMA descritpor */
|
||||||
desc->main_dma.dma_srcAddr = src_elan4_addr;
|
desc->main_dma.dma_srcAddr = src_elan4_addr;
|
||||||
desc->main_dma.dma_dstAddr = dst_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);
|
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);
|
INITEVENT_WORD (ctx, elan_event, &desc->main_doneWord);
|
||||||
RESETEVENT_WORD (&desc->main_doneWord);
|
RESETEVENT_WORD (&desc->main_doneWord);
|
||||||
PRIMEEVENT_WORD (ctx, elan_event, 1);
|
PRIMEEVENT_WORD (ctx, elan_event, 1);
|
||||||
|
@ -179,12 +179,6 @@ mca_ptl_elan_send_desc_done (
|
|||||||
ptl = ((ompi_ptl_elan_qdma_desc_t *)desc->desc)->ptl;
|
ptl = ((ompi_ptl_elan_qdma_desc_t *)desc->desc)->ptl;
|
||||||
header = &desc->frag_base.frag_header;
|
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 */
|
if(NULL == req) { /* An ack descriptor */
|
||||||
OMPI_FREE_LIST_RETURN (&ptl->queue->tx_desc_free,
|
OMPI_FREE_LIST_RETURN (&ptl->queue->tx_desc_free,
|
||||||
(ompi_list_item_t *) desc);
|
(ompi_list_item_t *) desc);
|
||||||
@ -194,24 +188,11 @@ mca_ptl_elan_send_desc_done (
|
|||||||
& MCA_PTL_FLAGS_ACK_MATCHED)
|
& MCA_PTL_FLAGS_ACK_MATCHED)
|
||||||
|| mca_pml_base_send_request_matched(req)) {
|
|| 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) {
|
if(fetchNset (&desc->frag_progressed, 1) == 0) {
|
||||||
ptl->super.ptl_send_progress(ptl, req,
|
ptl->super.ptl_send_progress(ptl, req,
|
||||||
header->hdr_frag.hdr_frag_length);
|
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 */
|
/* Return a frag or if not cached, or it is a follow up */
|
||||||
if (
|
if (
|
||||||
/*(header->hdr_frag.hdr_frag_offset != 0) || */
|
/*(header->hdr_frag.hdr_frag_offset != 0) || */
|
||||||
|
@ -716,11 +716,10 @@ mca_ptl_elan_update_desc (mca_ptl_elan_component_t * emp)
|
|||||||
if (rc) {
|
if (rc) {
|
||||||
struct ompi_ptl_elan_base_desc_t *basic;
|
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 *)
|
frag = (mca_ptl_elan_send_frag_t *)
|
||||||
ompi_list_remove_first (&ptl->send_frags);
|
ompi_list_remove_first (&ptl->send_frags);
|
||||||
basic = (ompi_ptl_elan_qdma_desc_t*)frag->desc;
|
basic = (ompi_ptl_elan_qdma_desc_t*)frag->desc;
|
||||||
|
|
||||||
mca_ptl_elan_send_desc_done (frag, basic->req);
|
mca_ptl_elan_send_desc_done (frag, basic->req);
|
||||||
INITEVENT_WORD (ctx, basic->elan_event, &basic->main_doneWord);
|
INITEVENT_WORD (ctx, basic->elan_event, &basic->main_doneWord);
|
||||||
RESETEVENT_WORD (&basic->main_doneWord);
|
RESETEVENT_WORD (&basic->main_doneWord);
|
||||||
|
@ -336,7 +336,6 @@ int mca_ptl_elan_wait_desc(mca_ptl_elan_send_frag_t *desc);
|
|||||||
/* control, synchronization and state prototypes */
|
/* control, synchronization and state prototypes */
|
||||||
int mca_ptl_elan_drain_recv(mca_ptl_elan_component_t *emp);
|
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_desc(mca_ptl_elan_component_t *emp);
|
||||||
int mca_ptl_elan_update_putget(mca_ptl_elan_component_t * emp);
|
|
||||||
/**
|
/**
|
||||||
* utility routines for parameter registration
|
* utility routines for parameter registration
|
||||||
*/
|
*/
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user