1
1

more fixes, reset state on completion..

This commit was SVN r9469.
Этот коммит содержится в:
Galen Shipman 2006-03-29 22:21:35 +00:00
родитель 2945f77f9e
Коммит 641fa6c0d2
6 изменённых файлов: 21 добавлений и 24 удалений

Просмотреть файл

@ -202,16 +202,5 @@ int mca_pml_dr_dump(
return OMPI_SUCCESS;
}
/**
*
*/
void mca_pml_dr_del_btl(mca_btl_base_module_t* btl)
{
/* remove this btl from the set used for forwarding */
mca_bml.bml_del_btl(btl);
/* publish this failure to all other peers */
}

Просмотреть файл

@ -25,6 +25,7 @@ static void mca_pml_dr_endpoint_construct(mca_pml_dr_endpoint_t* ep)
OBJ_CONSTRUCT(&ep->seq_sends, ompi_seq_tracker_t);
OBJ_CONSTRUCT(&ep->seq_recvs, ompi_seq_tracker_t);
OBJ_CONSTRUCT(&ep->seq_recvs_matched, ompi_seq_tracker_t);
ep->vfrag_seq = 0;
}

Просмотреть файл

@ -720,8 +720,8 @@ void mca_pml_dr_recv_frag_ack(
void *src_ptr,
uint64_t mask,
uint16_t len)
{
ompi_communicator_t* comm = ompi_comm_lookup(hdr->hdr_ctx);
{
mca_btl_base_descriptor_t* des;
mca_bml_base_btl_t* bml_btl;
mca_pml_dr_recv_frag_t* frag;

Просмотреть файл

@ -262,7 +262,12 @@ void mca_pml_dr_recv_request_progress(
bit = ((uint64_t)1 << hdr->hdr_frag.hdr_frag_idx);
MCA_PML_DR_RECV_REQUEST_VFRAG_LOOKUP(recvreq, &hdr->hdr_frag, vfrag);
if(vfrag->vf_ack & bit) {
/* duplicate, nothing to do */
if(vfrag->vf_ack == vfrag->vf_mask) {
mca_pml_dr_recv_request_ack(recvreq, &hdr->hdr_common,
hdr->hdr_frag.hdr_src_ptr,
vfrag->vf_size,
vfrag->vf_mask);
}
return;
}
bytes_received -= sizeof(mca_pml_dr_frag_hdr_t);

Просмотреть файл

@ -114,9 +114,17 @@ do { \
#define MCA_PML_DR_RECV_REQUEST_PML_COMPLETE(recvreq) \
do { \
opal_list_item_t* item; \
assert( false == recvreq->req_recv.req_base.req_pml_complete ); \
OPAL_THREAD_LOCK((recvreq)->req_mutex); \
while(NULL != (item = opal_list_remove_first(&(recvreq)->req_vfrags))) { \
OMPI_FREE_LIST_RETURN(&mca_pml_dr.vfrags, item); \
} \
OPAL_THREAD_UNLOCK((recvreq)->req_mutex); \
\
OPAL_THREAD_LOCK(&ompi_request_lock); \
opal_list_remove_item(&(recvreq)->req_proc->matched_receives, (opal_list_item_t*)(recvreq)); \
\
/* initialize request status */ \
recvreq->req_recv.req_base.req_pml_complete = true; \
recvreq->req_recv.req_base.req_ompi.req_status._count = \
@ -138,14 +146,6 @@ do {
*/
#define MCA_PML_DR_RECV_REQUEST_RETURN(recvreq) \
do { \
opal_list_item_t* item; \
OPAL_THREAD_LOCK((recvreq)->req_mutex); \
opal_list_remove_item(&(recvreq)->req_proc->matched_receives, (opal_list_item_t*)(recvreq)); \
while(NULL != (item = opal_list_remove_first(&(recvreq)->req_vfrags))) { \
OMPI_FREE_LIST_RETURN(&mca_pml_dr.vfrags, item); \
} \
OPAL_THREAD_UNLOCK((recvreq)->req_mutex); \
\
/* decrement reference counts */ \
MCA_PML_BASE_RECV_REQUEST_FINI(&(recvreq)->req_recv); \
OMPI_FREE_LIST_RETURN(&mca_pml_dr.recv_requests, (opal_list_item_t*)(recvreq)); \
@ -194,6 +194,8 @@ do {
(request)->req_recv.req_base.req_ompi.req_complete = false; \
(request)->req_recv.req_base.req_ompi.req_state = OMPI_REQUEST_ACTIVE; \
(request)->req_vfrag = &(request)->req_vfrag0; \
(request)->req_proc = NULL; \
(request)->req_endpoint = NULL; \
\
/* always set the req_status.MPI_TAG to ANY_TAG before starting the \
* request. This field is used if cancelled to find out if the request \
@ -283,6 +285,7 @@ do {
ompi_convertor_set_position( \
&(request->req_recv.req_convertor), \
&data_offset); \
assert((request->req_recv.req_convertor.flags & CONVERTOR_COMPLETED) == 0); \
ompi_convertor_unpack( \
&(request)->req_recv.req_convertor, \
iov, \

Просмотреть файл

@ -275,7 +275,6 @@ do {
#define MCA_PML_DR_SEND_REQUEST_VFRAG_INIT(sendreq, endpoint, size, vfrag) \
do { \
mca_pml_dr_comm_t* comm = sendreq->req_send.req_base.req_comm->c_pml_comm; \
size_t max_send_size = endpoint->base.btl_max_send_size - \
sizeof(mca_pml_dr_frag_hdr_t); \
size_t div = size / max_send_size; \
@ -303,7 +302,7 @@ do {
else \
vfrag->vf_mask = (((uint64_t)1 << vfrag->vf_len) - (uint64_t)1); \
} \
vfrag->vf_id = OPAL_THREAD_ADD32(&endpoint->vfrag_seq,1); \
vfrag->vf_id = OPAL_THREAD_ADD32(&endpoint->vfrag_seq,1); \
vfrag->vf_offset = sendreq->req_send_offset; \
vfrag->vf_max_send_size = max_send_size; \
vfrag->vf_send.pval = sendreq; \