1
1

More miscellaneous cleanup of bfo.

This commit was SVN r23986.
Этот коммит содержится в:
Rolf vandeVaart 2010-11-02 20:11:47 +00:00
родитель 505efbaa27
Коммит 1b231f7e73
7 изменённых файлов: 20 добавлений и 31 удалений

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

@ -1779,7 +1779,6 @@ void mca_pml_bfo_check_recv_ctl_completion_status(mca_btl_base_module_t* btl,
int status)
{
mca_pml_bfo_common_hdr_t * common = des->des_src->seg_addr.pval;
mca_pml_bfo_ack_hdr_t* ack; /* ACK header */
mca_pml_bfo_rdma_hdr_t* hdr; /* PUT header */
struct mca_btl_base_descriptor_t* rdma_des;
mca_pml_bfo_recv_request_t* recvreq;
@ -1787,8 +1786,7 @@ void mca_pml_bfo_check_recv_ctl_completion_status(mca_btl_base_module_t* btl,
if(OPAL_UNLIKELY(OMPI_SUCCESS != status)) {
switch (common->hdr_type) {
case MCA_PML_BFO_HDR_TYPE_ACK:
ack = (mca_pml_bfo_ack_hdr_t*)des->des_src->seg_addr.pval;
recvreq = (mca_pml_bfo_recv_request_t*) ack->hdr_dst_req.pval;
recvreq = des->des_cbdata;
/* Record the error. Send RECVERRNOTIFY if necessary. */
if (recvreq->req_errstate) {
@ -1860,8 +1858,7 @@ void mca_pml_bfo_check_recv_ctl_completion_status(mca_btl_base_module_t* btl,
switch (common->hdr_type) {
case MCA_PML_BFO_HDR_TYPE_ACK:
ack = (mca_pml_bfo_ack_hdr_t*)des->des_src->seg_addr.pval;
recvreq = (mca_pml_bfo_recv_request_t*) ack->hdr_dst_req.pval;
recvreq = des->des_cbdata;
recvreq->req_events--;
assert(recvreq->req_events >= 0);
if(OPAL_UNLIKELY (recvreq->req_errstate & RECVREQ_RNDVRESTART_RECVED)) {

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

@ -253,6 +253,18 @@ extern void mca_pml_bfo_recv_frag_callback_recverrnotify( mca_btl_base_module_t
* Macros for pml_bfo_sendreq.c file.
*/
/* This macro is called on the sending side after receiving
* a PUT message. There is a chance that this PUT message
* has shown up and is attempting to modify the state of
* the req_state, but the req_state is no longer being tracked
* because the RNDV message has turned into a RGET message
* because it got an error on the RNDV completion.
*/
#define MCA_PML_BFO_VERIFY_SENDREQ_REQ_STATE_VALUE(sendreq) \
if (sendreq->req_state == -1) { \
OPAL_THREAD_ADD32(&sendreq->req_state, 1); \
}
/* Now check the error state. This request can be in error if the
* RNDV message made it over, but the receiver got an error trying to
* send the ACK back and therefore sent a RECVERRNOTIFY message. In
@ -326,7 +338,6 @@ extern void mca_pml_bfo_recv_frag_callback_recverrnotify( mca_btl_base_module_t
mca_bml_base_endpoint_t* bml_endpoint = (mca_bml_base_endpoint_t*) proc->proc_bml; \
bml_btl = mca_bml_base_btl_array_find(&bml_endpoint->btl_eager, btl); \
}
#define MCA_PML_BFO_CHECK_SENDREQ_EAGER_BML_BTL(bml_btl, btl, sendreq, type) \
if (bml_btl->btl != btl) { \
mca_pml_bfo_find_sendreq_eager_bml_btl(&bml_btl, btl, sendreq, type); \

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

@ -243,8 +243,6 @@ void mca_pml_bfo_recv_frag_callback_match(mca_btl_base_module_t* btl,
slow_path:
OPAL_THREAD_UNLOCK(&comm->matching_lock);
#ifdef PML_BFO
/* Check for duplicate messages. If message is duplicate, then just
* return as that essentially drops the message. */
if (true == mca_pml_bfo_is_duplicate_msg(proc, hdr)) {
return;
}
@ -626,6 +624,7 @@ static int mca_pml_bfo_recv_frag_match( mca_btl_base_module_t *btl,
* the fragment.
*/
OPAL_THREAD_LOCK(&comm->matching_lock);
#ifdef PML_BFO
/* In case of network failover, we may get a message telling us to
* restart. In that case, we already have a pointer to the receive
@ -718,8 +717,6 @@ wrong_seq:
* is ahead of sequence. Save it for later.
*/
#ifdef PML_BFO
/* Check for duplicate messages. If message is duplicate, then just
* return as that essentially drops the message. */
if (true == mca_pml_bfo_is_duplicate_msg(proc, hdr)) {
return OMPI_SUCCESS;
}

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

@ -251,7 +251,7 @@ int mca_pml_bfo_recv_request_ack_send_btl(
/* initialize descriptor */
des->des_cbfunc = mca_pml_bfo_recv_ctl_completion;
#ifdef PML_BFO
des->des_cbdata = (void *)proc;
des->des_cbdata = hdr_dst_req;
#endif
rc = mca_bml_base_send(bml_btl, des, MCA_PML_BFO_HDR_TYPE_ACK);

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

@ -169,8 +169,7 @@ recv_request_pml_complete(mca_pml_bfo_recv_request_t *recvreq)
}
recvreq->req_rdma_cnt = 0;
#ifdef PML_BFO
/* Reset to a value that to indicate it is invalid. */
recvreq->req_msgseq = recvreq->req_msgseq - 100;
recvreq->req_msgseq -= 100;
#endif
OPAL_THREAD_LOCK(&ompi_request_lock);

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

@ -1343,18 +1343,10 @@ void mca_pml_bfo_send_request_put( mca_pml_bfo_send_request_t* sendreq,
size_t i, size = 0;
if(hdr->hdr_common.hdr_flags & MCA_PML_BFO_HDR_TYPE_ACK) {
#ifdef PML_BFO
/* Handle the failover case where a RNDV request may
* have turned into a RGET and therefore the state
* is not being tracked. */
if (sendreq->req_state != 0) {
OPAL_THREAD_ADD32(&sendreq->req_state, -1);
}
#else
OPAL_THREAD_ADD32(&sendreq->req_state, -1);
#endif
}
#ifdef PML_BFO
MCA_PML_BFO_VERIFY_SENDREQ_REQ_STATE_VALUE(sendreq);
sendreq->req_recv = hdr->hdr_dst_req; /* only needed once, but it is OK */
#endif
@ -1385,8 +1377,8 @@ void mca_pml_bfo_send_request_put( mca_pml_bfo_send_request_t* sendreq,
frag->rdma_bml = mca_bml_base_btl_array_find(&bml_endpoint->btl_rdma, btl);
#ifdef PML_BFO
frag->rdma_btl = btl;
MCA_PML_BFO_CHECK_FOR_REMOVED_BML(sendreq, frag, btl);
frag->rdma_btl = btl; /* in case frag ends up on pending */
#endif
frag->rdma_hdr.hdr_rdma = *hdr;
frag->rdma_req = sendreq;

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

@ -250,14 +250,7 @@ send_request_pml_complete(mca_pml_bfo_send_request_t *sendreq)
}
sendreq->req_send.req_base.req_pml_complete = true;
#ifdef PML_BFO
assert(0 == sendreq->req_events);
sendreq->req_restartseq = 0;
/* Since sequence numbers increase monotonically and
* roll over, initialize it to a value far away from
* what it was. I cannot set it to something like -1
* as that is not within the valid range. */
sendreq->req_send.req_base.req_sequence =
sendreq->req_send.req_base.req_sequence - 10;
sendreq->req_send.req_base.req_sequence -= 100;
#endif
if(sendreq->req_send.req_base.req_free_called) {