ucs_status_t uct_ugni_ep_pending_add(uct_ep_h tl_ep, uct_pending_req_t *n){ uct_ugni_iface_t *iface = ucs_derived_of(tl_ep->iface, uct_ugni_iface_t); uct_ugni_ep_t *ep = ucs_derived_of(tl_ep, uct_ugni_ep_t); UCS_STATIC_ASSERT(sizeof(ucs_arbiter_elem_t) <= UCT_PENDING_REQ_PRIV_LEN); ucs_arbiter_elem_init((ucs_arbiter_elem_t *)n->priv); ucs_arbiter_group_push_elem(&ep->arb_group, (ucs_arbiter_elem_t*) n->priv); ucs_arbiter_group_schedule(&iface->arbiter, &ep->arb_group); return UCS_OK; }
ucs_status_t uct_ugni_ep_pending_add(uct_ep_h tl_ep, uct_pending_req_t *n, unsigned flags){ uct_ugni_iface_t *iface = ucs_derived_of(tl_ep->iface, uct_ugni_iface_t); uct_ugni_ep_t *ep = ucs_derived_of(tl_ep, uct_ugni_ep_t); UCS_STATIC_ASSERT(sizeof(ucs_arbiter_elem_t) <= UCT_PENDING_REQ_PRIV_LEN); uct_ugni_enter_async(iface); uct_pending_req_arb_group_push(&ep->arb_group, n); ucs_arbiter_group_schedule(&iface->arbiter, &ep->arb_group); UCT_TL_EP_STAT_PEND(&ep->super); uct_ugni_leave_async(iface); return UCS_OK; }
ucs_status_t uct_mm_ep_pending_add(uct_ep_h tl_ep, uct_pending_req_t *n) { uct_mm_iface_t *iface = ucs_derived_of(tl_ep->iface, uct_mm_iface_t); uct_mm_ep_t *ep = ucs_derived_of(tl_ep, uct_mm_ep_t); /* check if resources became available */ if (uct_mm_ep_has_tx_resources(ep)) { return UCS_ERR_BUSY; } UCS_STATIC_ASSERT(sizeof(ucs_arbiter_elem_t) <= UCT_PENDING_REQ_PRIV_LEN); ucs_arbiter_elem_init((ucs_arbiter_elem_t *)n->priv); /* add the request to the ep's arbiter_group (pending queue) */ ucs_arbiter_group_push_elem(&ep->arb_group, (ucs_arbiter_elem_t*) n->priv); /* add the ep's group to the arbiter */ ucs_arbiter_group_schedule(&iface->arbiter, &ep->arb_group); return UCS_OK; }