static void uct_cm_iface_progress(void *arg) { uct_cm_pending_req_priv_t *priv; uct_cm_iface_t *iface = arg; uct_cm_enter(iface); uct_pending_queue_dispatch(priv, &iface->notify_q, iface->num_outstanding < iface->config.max_outstanding); uct_cm_leave(iface); ucs_callbackq_remove(&uct_cm_iface_worker(iface)->progress_q, uct_cm_iface_progress, iface); }
unsigned uct_tcp_ep_progress_tx(uct_tcp_ep_t *ep) { uct_pending_req_priv_t *priv; unsigned count = 0; ucs_trace_func("ep=%p", ep); if (ep->length > 0) { count += uct_tcp_ep_send(ep); } uct_pending_queue_dispatch(priv, &ep->pending_q, uct_tcp_ep_can_send(ep)); if (uct_tcp_ep_can_send(ep)) { ucs_assert(ucs_queue_is_empty(&ep->pending_q)); uct_tcp_ep_mod_events(ep, 0, EPOLLOUT); } return count; }
static void uct_cm_iface_notify(uct_cm_iface_t *iface) { uct_cm_pending_req_priv_t *priv; uct_pending_queue_dispatch(priv, &iface->notify_q, iface->num_outstanding < iface->config.max_outstanding); }