static int sock_ctx_enable(struct fid_ep *ep) { struct sock_tx_ctx *tx_ctx; struct sock_rx_ctx *rx_ctx; switch (ep->fid.fclass) { case FI_CLASS_RX_CTX: rx_ctx = container_of(ep, struct sock_rx_ctx, ctx.fid); rx_ctx->enabled = 1; sock_pe_add_rx_ctx(rx_ctx->domain->pe, rx_ctx); if (!rx_ctx->ep_attr->listener.listener_thread && sock_conn_listen(rx_ctx->ep_attr)) { SOCK_LOG_ERROR("failed to create listener\n"); } return 0; case FI_CLASS_TX_CTX: tx_ctx = container_of(ep, struct sock_tx_ctx, fid.ctx.fid); tx_ctx->enabled = 1; sock_pe_add_tx_ctx(tx_ctx->domain->pe, tx_ctx); if (!tx_ctx->ep_attr->listener.listener_thread && sock_conn_listen(tx_ctx->ep_attr)) { SOCK_LOG_ERROR("failed to create listener\n"); } return 0; default: SOCK_LOG_ERROR("Invalid CTX\n"); break; } return -FI_EINVAL; }
static int sock_ctx_enable(struct fid_ep *ep) { struct sock_tx_ctx *tx_ctx; struct sock_rx_ctx *rx_ctx; switch (ep->fid.fclass) { case FI_CLASS_RX_CTX: rx_ctx = container_of(ep, struct sock_rx_ctx, ctx.fid); rx_ctx->enabled = 1; if (!rx_ctx->progress) { sock_pe_add_rx_ctx(rx_ctx->domain->pe, rx_ctx); rx_ctx->progress = 1; } return 0; case FI_CLASS_TX_CTX: tx_ctx = container_of(ep, struct sock_tx_ctx, fid.ctx.fid); tx_ctx->enabled = 1; if (!tx_ctx->progress) { sock_pe_add_tx_ctx(tx_ctx->domain->pe, tx_ctx); tx_ctx->progress = 1; } return 0; default: SOCK_LOG_ERROR("Invalid CTX\n"); break; } return -FI_EINVAL; }
int sock_ep_enable(struct fid_ep *ep) { int i; struct sock_ep *sock_ep; sock_ep = container_of(ep, struct sock_ep, ep); if (sock_ep->tx_ctx && sock_ep->tx_ctx->fid.ctx.fid.fclass == FI_CLASS_TX_CTX) { sock_ep->tx_ctx->enabled = 1; if (!sock_ep->tx_ctx->progress) { sock_pe_add_tx_ctx(sock_ep->domain->pe, sock_ep->tx_ctx); sock_ep->tx_ctx->progress = 1; } } if (sock_ep->rx_ctx && sock_ep->rx_ctx->ctx.fid.fclass == FI_CLASS_RX_CTX) { sock_ep->rx_ctx->enabled = 1; if (!sock_ep->rx_ctx->progress) { sock_pe_add_rx_ctx(sock_ep->domain->pe, sock_ep->rx_ctx); sock_ep->rx_ctx->progress = 1; } } for (i = 0; i < sock_ep->ep_attr.tx_ctx_cnt; i++) { if (sock_ep->tx_array[i]) { sock_ep->tx_array[i]->enabled = 1; if (!sock_ep->tx_array[i]->progress) { sock_pe_add_tx_ctx(sock_ep->domain->pe, sock_ep->tx_array[i]); sock_ep->tx_array[i]->progress = 1; } } } for (i = 0; i < sock_ep->ep_attr.rx_ctx_cnt; i++) { if (sock_ep->rx_array[i]) { sock_ep->rx_array[i]->enabled = 1; if (!sock_ep->rx_array[i]->progress) { sock_pe_add_rx_ctx(sock_ep->domain->pe, sock_ep->rx_array[i]); sock_ep->rx_array[i]->progress = 1; } } } return 0; }
int sock_ep_enable(struct fid_ep *ep) { size_t i; struct sock_ep *sock_ep; struct sock_tx_ctx *tx_ctx; struct sock_rx_ctx *rx_ctx; sock_ep = container_of(ep, struct sock_ep, ep); for (i = 0; i < sock_ep->attr->ep_attr.tx_ctx_cnt; i++) { tx_ctx = sock_ep->attr->tx_array[i]; if (tx_ctx) { tx_ctx->enabled = 1; if (tx_ctx->use_shared) { if (tx_ctx->stx_ctx) { sock_pe_add_tx_ctx(tx_ctx->domain->pe, tx_ctx->stx_ctx); tx_ctx->stx_ctx->enabled = 1; } } else { sock_pe_add_tx_ctx(tx_ctx->domain->pe, tx_ctx); } } } for (i = 0; i < sock_ep->attr->ep_attr.rx_ctx_cnt; i++) { rx_ctx = sock_ep->attr->rx_array[i]; if (rx_ctx) { rx_ctx->enabled = 1; if (rx_ctx->use_shared) { if (rx_ctx->srx_ctx) { sock_pe_add_rx_ctx(rx_ctx->domain->pe, rx_ctx->srx_ctx); rx_ctx->srx_ctx->enabled = 1; } } else { sock_pe_add_rx_ctx(rx_ctx->domain->pe, rx_ctx); } } } if (sock_ep->attr->ep_type != FI_EP_MSG && !sock_ep->attr->conn_handle.do_listen && sock_conn_listen(sock_ep->attr)) SOCK_LOG_ERROR("cannot start connection thread\n"); sock_ep->attr->is_enabled = 1; return 0; }