diff --git a/src/mca/ptl/mx/ptl_mx.c b/src/mca/ptl/mx/ptl_mx.c index 8250052a9a..32d3cb5806 100644 --- a/src/mca/ptl/mx/ptl_mx.c +++ b/src/mca/ptl/mx/ptl_mx.c @@ -293,7 +293,7 @@ int mca_ptl_mx_send_continue( hdr->hdr_frag.hdr_frag_seq = 0; hdr->hdr_frag.hdr_src_ptr.lval = 0; /* for VALGRIND/PURIFY - REPLACE WITH MACRO */ hdr->hdr_frag.hdr_src_ptr.pval = sendfrag; - hdr->hdr_frag.hdr_dst_ptr.lval = 0; + hdr->hdr_frag.hdr_dst_ptr = sendreq->req_peer_match; /* initialize convertor */ sendfrag->frag_free = 0; @@ -421,7 +421,7 @@ void mca_ptl_mx_matched( OMPI_THREAD_UNLOCK(&mca_ptl_mx_component.mx_lock); } else { mx_return_t mx_return; - mca_ptl_mx_send_frag_init_ack(ack, mx_ptl, mx_frag); + MCA_PTL_MX_SEND_FRAG_INIT_ACK(ack, ptl, mx_frag); if(ack->frag_send.frag_base.frag_peer->peer_byte_swap) { MCA_PTL_BASE_ACK_HDR_HTON(ack->frag_send.frag_base.frag_header.hdr_ack); } diff --git a/src/mca/ptl/mx/ptl_mx_module.h b/src/mca/ptl/mx/ptl_mx_module.h index daf1dc2de0..5c17406060 100644 --- a/src/mca/ptl/mx/ptl_mx_module.h +++ b/src/mca/ptl/mx/ptl_mx_module.h @@ -56,73 +56,72 @@ do { * Routine to process complete request(s). */ -static inline void MCA_PTL_MX_PROGRESS(mca_ptl_mx_module_t* ptl, mx_request_t mx_request) -{ - mx_return_t mx_return; - mx_status_t mx_status; - uint32_t mx_result; - mca_ptl_base_frag_t* frag; - - mx_return = mx_test( - ptl->mx_endpoint, - &mx_request, - &mx_status, - &mx_result); - if(mx_return != MX_SUCCESS) { - ompi_output(0, "mca_ptl_mx_progress: mx_test() failed with status=%dn", - mx_return); - return; - } - - frag = (mca_ptl_base_frag_t*)mx_status.context; - switch(frag->frag_type) { - case MCA_PTL_FRAGMENT_SEND: - { - mca_ptl_mx_send_frag_t* sendfrag = (mca_ptl_mx_send_frag_t*)frag; - mca_pml_base_send_request_t* sendreq = - sendfrag->frag_send.frag_request; - bool req_cached = sendreq->req_cached; - ptl->super.ptl_send_progress( - &ptl->super, - sendreq, - sendfrag->frag_send.frag_base.frag_size); - if(req_cached == false) - MCA_PTL_MX_SEND_FRAG_RETURN(sendfrag); - break; - } - case MCA_PTL_FRAGMENT_RECV: - { - mca_ptl_mx_recv_frag_t* recvfrag = (mca_ptl_mx_recv_frag_t*)frag; - mca_ptl_base_header_t* hdr = - &recvfrag->frag_recv.frag_base.frag_header; - int rc; - switch(hdr->hdr_common.hdr_type) { - case MCA_PTL_HDR_TYPE_MATCH: - { - if(hdr->hdr_common.hdr_flags & MCA_PTL_FLAGS_NBO) { - MCA_PTL_BASE_MATCH_HDR_NTOH(hdr->hdr_match); - } - ptl->super.ptl_match(&ptl->super, &recvfrag->frag_recv, - &hdr->hdr_match); - break; - } - case MCA_PTL_HDR_TYPE_FRAG: - break; - case MCA_PTL_HDR_TYPE_ACK: - break; - } - MCA_PTL_MX_POST(ptl, rc); - break; - } - default: - { - ompi_output(0, "mca_ptl_mx_progress: invalid request type: %dn", - frag->frag_type); - break; - } - } +#define MCA_PTL_MX_PROGRESS(ptl, mx_request) \ +{ \ + mx_return_t mx_return; \ + mx_status_t mx_status; \ + uint32_t mx_result; \ + mca_ptl_base_frag_t* frag; \ + \ + mx_return = mx_test( \ + ptl->mx_endpoint, \ + &mx_request, \ + &mx_status, \ + &mx_result); \ + if(mx_return != MX_SUCCESS) { \ + ompi_output(0, "mca_ptl_mx_progress: mx_test() failed with status=%dn", \ + mx_return); \ + break; \ + } \ + \ + frag = (mca_ptl_base_frag_t*)mx_status.context; \ + switch(frag->frag_type) { \ + case MCA_PTL_FRAGMENT_SEND: \ + { \ + mca_ptl_mx_send_frag_t* sendfrag = (mca_ptl_mx_send_frag_t*)frag; \ + mca_pml_base_send_request_t* sendreq = \ + sendfrag->frag_send.frag_request; \ + bool req_cached = sendreq->req_cached; \ + ptl->super.ptl_send_progress( \ + &ptl->super, \ + sendreq, \ + sendfrag->frag_send.frag_base.frag_size); \ + if(req_cached == false) \ + MCA_PTL_MX_SEND_FRAG_RETURN(sendfrag); \ + break; \ + } \ + case MCA_PTL_FRAGMENT_RECV: \ + { \ + mca_ptl_mx_recv_frag_t* recvfrag = (mca_ptl_mx_recv_frag_t*)frag; \ + mca_ptl_base_header_t* hdr = \ + &recvfrag->frag_recv.frag_base.frag_header; \ + int rc; \ + switch(hdr->hdr_common.hdr_type) { \ + case MCA_PTL_HDR_TYPE_MATCH: \ + { \ + if(hdr->hdr_common.hdr_flags & MCA_PTL_FLAGS_NBO) { \ + MCA_PTL_BASE_MATCH_HDR_NTOH(hdr->hdr_match); \ + } \ + ptl->super.ptl_match(&ptl->super, &recvfrag->frag_recv, \ + &hdr->hdr_match); \ + break; \ + } \ + case MCA_PTL_HDR_TYPE_FRAG: \ + break; \ + case MCA_PTL_HDR_TYPE_ACK: \ + break; \ + } \ + MCA_PTL_MX_POST(ptl, rc); \ + break; \ + } \ + default: \ + { \ + ompi_output(0, "mca_ptl_mx_progress: invalid request type: %dn", \ + frag->frag_type); \ + break; \ + } \ + } \ } - #endif diff --git a/src/mca/ptl/mx/ptl_mx_sendfrag.c b/src/mca/ptl/mx/ptl_mx_sendfrag.c index 0a508a0362..9c66dfe934 100644 --- a/src/mca/ptl/mx/ptl_mx_sendfrag.c +++ b/src/mca/ptl/mx/ptl_mx_sendfrag.c @@ -34,18 +34,4 @@ static void mca_ptl_mx_send_frag_destruct(mca_ptl_mx_send_frag_t* frag) } -static void *mca_ptl_mx_alloc(size_t *size) -{ - return malloc(*size); -} - - -void mca_ptl_mx_send_frag_init_ack( - mca_ptl_mx_send_frag_t* ack, - mca_ptl_mx_module_t* ptl, - struct mca_ptl_mx_recv_frag_t* recv_frag) -{ - -} - diff --git a/src/mca/ptl/mx/ptl_mx_sendfrag.h b/src/mca/ptl/mx/ptl_mx_sendfrag.h index 7a102de3f5..cc495c55aa 100644 --- a/src/mca/ptl/mx/ptl_mx_sendfrag.h +++ b/src/mca/ptl/mx/ptl_mx_sendfrag.h @@ -51,11 +51,28 @@ typedef struct mca_ptl_mx_send_frag_t mca_ptl_mx_send_frag_t; OBJ_CLASS_DECLARATION(mca_ptl_mx_send_frag_t); -void mca_ptl_mx_send_frag_init_ack( - mca_ptl_mx_send_frag_t* ack, - mca_ptl_mx_module_t* ptl, - struct mca_ptl_mx_recv_frag_t* recv_frag); - +#define MCA_PTL_MX_SEND_FRAG_INIT_ACK(ack,ptl,frag) \ +{ \ + mca_ptl_base_header_t* hdr = &(ack)->frag_send.frag_base.frag_header; \ + mca_pml_base_recv_request_t* request = frag->frag_recv.frag_request; \ + hdr->hdr_common.hdr_type = MCA_PTL_HDR_TYPE_ACK; \ + hdr->hdr_common.hdr_flags = 0; \ + hdr->hdr_common.hdr_size = sizeof(mca_ptl_base_ack_header_t); \ + hdr->hdr_ack.hdr_src_ptr = frag->frag_recv.frag_base.frag_header.hdr_frag.hdr_src_ptr; \ + hdr->hdr_ack.hdr_dst_match.lval = 0; /* for VALGRIND/PURIFY - REPLACE WITH MACRO */ \ + hdr->hdr_ack.hdr_dst_match.pval = request; \ + hdr->hdr_ack.hdr_dst_addr.lval = 0; /* for VALGRIND/PURIFY - REPLACE WITH MACRO */ \ + hdr->hdr_ack.hdr_dst_addr.pval = request->req_base.req_addr; \ + hdr->hdr_ack.hdr_dst_size = request->req_bytes_packed; \ + (ack)->frag_send.frag_request = NULL; \ + (ack)->frag_send.frag_base.frag_peer = NULL; \ + (ack)->frag_send.frag_base.frag_owner = ptl; \ + (ack)->frag_send.frag_base.frag_addr = NULL; \ + (ack)->frag_send.frag_base.frag_size = 0; \ + (ack)->frag_segment_count = 1; \ + (ack)->frag_free = 0; \ +} + #endif