static inline void uct_ud_verbs_iface_tx_data(uct_ud_verbs_iface_t *iface, uct_ud_verbs_ep_t *ep) { int UCS_V_UNUSED ret; struct ibv_send_wr *bad_wr; uct_ud_verbs_iface_fill_tx_wr(iface, ep, &iface->tx.wr_bcp, 0); UCT_UD_EP_HOOK_CALL_TX(&ep->super, (uct_ud_neth_t *)iface->tx.sge[0].addr); ret = ibv_post_send(iface->super.qp, &iface->tx.wr_bcp, &bad_wr); ucs_assertv(ret == 0, "ibv_post_send() returned %d (%m)", ret); uct_ib_log_post_send(iface->super.qp, &iface->tx.wr_bcp, NULL); }
static inline void uct_ud_verbs_iface_tx_inl(uct_ud_verbs_iface_t *iface, uct_ud_verbs_ep_t *ep, const void *buffer, unsigned length) { int UCS_V_UNUSED ret; struct ibv_send_wr *bad_wr; iface->tx.sge[1].addr = (uintptr_t)buffer; iface->tx.sge[1].length = length; uct_ud_verbs_iface_fill_tx_wr(iface, ep, &iface->tx.wr_inl, IBV_SEND_INLINE); UCT_UD_EP_HOOK_CALL_TX(&ep->super, (uct_ud_neth_t *)iface->tx.sge[0].addr); ret = ibv_post_send(iface->super.qp, &iface->tx.wr_inl, &bad_wr); ucs_assertv(ret == 0, "ibv_post_send() returned %d (%m)", ret); uct_ib_log_post_send(iface->super.qp, &iface->tx.wr_inl, NULL); }
static inline void uct_ud_verbs_ep_tx_skb(uct_ud_verbs_iface_t *iface, uct_ud_verbs_ep_t *ep, uct_ud_send_skb_t *skb, unsigned flags) { int UCS_V_UNUSED ret; struct ibv_send_wr *bad_wr; iface->tx.sge[0].lkey = skb->lkey; iface->tx.sge[0].length = skb->len; iface->tx.sge[0].addr = (uintptr_t)skb->neth; uct_ud_verbs_iface_fill_tx_wr(iface, ep, &iface->tx.wr_skb, flags); UCT_UD_EP_HOOK_CALL_TX(&ep->super, (uct_ud_neth_t *)iface->tx.sge[0].addr); ret = ibv_post_send(iface->super.qp, &iface->tx.wr_skb, &bad_wr); ucs_assertv(ret == 0, "ibv_post_send() returned %d (%m)", ret); uct_ib_log_post_send(&iface->super.super, iface->super.qp, &iface->tx.wr_skb, NULL); --iface->super.tx.available; }