int MPID_nem_mxm_poll(int in_blocking_progress) { int mpi_errno = MPI_SUCCESS; MPID_Request *req = NULL; MPIDI_STATE_DECL(MPID_STATE_MXM_POLL); MPIDI_FUNC_ENTER(MPID_STATE_MXM_POLL); while (!MPID_nem_mxm_queue_empty(mxm_obj->sreq_queue)) { MPID_nem_mxm_queue_dequeue(&mxm_obj->sreq_queue, &req); _mxm_handle_sreq(req); } mpi_errno = _mxm_poll(); if (mpi_errno) MPIR_ERR_POP(mpi_errno); fn_exit: MPIDI_FUNC_EXIT(MPID_STATE_MXM_POLL); return mpi_errno; fn_fail: goto fn_exit; }
static void _mxm_send_completion_cb(void *context) { MPID_Request *req = (MPID_Request *) context; MPID_nem_mxm_vc_area *vc_area = NULL; MPID_nem_mxm_req_area *req_area = NULL; MPIU_Assert(req); _dbg_mxm_out_req(req); vc_area = VC_BASE(req->ch.vc); req_area = REQ_BASE(req); _mxm_to_mpi_status(req_area->mxm_req->item.base.error, &req->status); list_enqueue(&vc_area->mxm_ep->free_queue, &req_area->mxm_req->queue); _dbg_mxm_output(5, "========> %s SEND req %p status %d\n", (MPIR_STATUS_GET_CANCEL_BIT(req->status) ? "Canceling" : "Completing"), req, req->status.MPI_ERROR); if (likely(!MPIR_STATUS_GET_CANCEL_BIT(req->status))) { _mxm_handle_sreq(req); } }