void MPID_nem_mxm_get_adi_msg(mxm_conn_h conn, mxm_imm_t imm, void *data, size_t length, size_t offset, int last) { MPIDI_VC_t *vc = NULL; MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "MPID_nem_mxm_get_adi_msg"); vc = mxm_conn_ctx_get(conn); _dbg_mxm_output(5, "========> Getting ADI msg (from=%d data_size %d) \n", vc->pg_rank, length); _dbg_mxm_out_buf(data, (length > 16 ? 16 : length)); MPID_nem_handle_pkt(vc, data, (MPIDI_msg_sz_t) (length)); }
int MPID_nem_newmad_poll(int in_blocking_poll) { nm_sr_request_t *p_request = NULL; nm_tag_t match_info = 0; int mpi_errno = MPI_SUCCESS; nm_sr_send_success(mpid_nem_newmad_session, &p_request); if (p_request != NULL) { MPID_nem_newmad_unified_req_t *ref; MPID_Request *req; MPID_Request_kind_t kind; MPIR_Context_id_t ctxt; nm_sr_get_stag(mpid_nem_newmad_session,p_request, &match_info); NEM_NMAD_MATCH_GET_CTXT(match_info, ctxt); nm_sr_get_ref(mpid_nem_newmad_session,p_request,(void *)&ref); req = &(ref->mpi_req); MPIU_Assert(req != NULL); kind = req->kind; if(ctxt == NEM_NMAD_INTRA_CTXT) { if ((kind == MPID_REQUEST_SEND) || (kind == MPID_PREQUEST_SEND)) { MPID_nem_newmad_handle_sreq(req); } } else { if ((kind == MPID_REQUEST_SEND) || (kind == MPID_PREQUEST_SEND)) { MPIU_Assert(MPIDI_Request_get_type(req) != MPIDI_REQUEST_TYPE_GET_RESP); MPID_nem_newmad_handle_sreq(req); } } } nm_sr_recv_success(mpid_nem_newmad_session, &p_request); if (p_request != NULL) { MPID_nem_newmad_unified_req_t *ref; MPID_Request *req; MPID_Request_kind_t kind; MPIR_Context_id_t ctxt; size_t size; nm_sr_get_ref(mpid_nem_newmad_session,p_request,(void *)&ref); req = &(ref->mpi_req); MPIU_Assert(req != NULL); kind = req->kind; nm_sr_get_size(mpid_nem_newmad_session, p_request, &size); nm_sr_get_rtag(mpid_nem_newmad_session,p_request, &match_info); NEM_NMAD_MATCH_GET_CTXT(match_info, ctxt); if(ctxt == NEM_NMAD_INTRA_CTXT) { MPID_nem_newmad_internal_req_t *adi_req = &(ref->nem_newmad_req); if (kind == MPID_REQUEST_RECV) { if (size <= sizeof(MPIDI_CH3_PktGeneric_t)) { MPID_nem_handle_pkt(adi_req->vc,(char *)&(adi_req->pending_pkt),(MPIDI_msg_sz_t)(size)); } else { MPID_nem_handle_pkt(adi_req->vc,(char *)(adi_req->tmpbuf),(MPIDI_msg_sz_t)(adi_req->tmpbuf_sz)); MPIU_Free(adi_req->tmpbuf); } nm_core_disable_progression(mpid_nem_newmad_session->p_core); MPID_nem_newmad_internal_req_enqueue(adi_req); nm_core_enable_progression(mpid_nem_newmad_session->p_core); } else { MPIU_Assert(0); } } else { if ((kind == MPID_REQUEST_RECV) || (kind == MPID_PREQUEST_RECV)) { int found = FALSE; nm_sr_request_t *nmad_request = NULL; MPIU_Assert(MPIDI_Request_get_type(req) != MPIDI_REQUEST_TYPE_GET_RESP); MPIU_THREAD_CS_ENTER(MSGQUEUE,req); MPID_NEM_NMAD_GET_REQ_FROM_HASH(req,nmad_request); if(nmad_request != NULL) { MPIU_Assert(req->dev.match.parts.rank == MPI_ANY_SOURCE); MPIU_Free(nmad_request); } found = MPIDI_CH3U_Recvq_DP(req); if(found){ MPID_nem_newmad_handle_rreq(req,match_info,size); } MPIU_THREAD_CS_EXIT(MSGQUEUE,req); } else { fprintf(stdout, ">>>>>>>>>>>>> ERROR: Wrong req type : %i (%p)\n",(int)kind,req); MPIU_Assert(0); } } } fn_exit: return mpi_errno; fn_fail: ATTRIBUTE((unused)) goto fn_exit; }