static int alloc_ep_res(struct fi_info *fi) { int ret; ret = ft_alloc_ep_res(fi); if (ret) return ret; if (tx_shared_ctx) { ret = fi_stx_context(domain, fi->tx_attr, &stx_ctx, NULL); if (ret) { FT_PRINTERR("fi_stx_context", ret); return ret; } } if (rx_shared_ctx) { ret = fi_srx_context(domain, fi->rx_attr, &srx_ctx, NULL); if (ret) { FT_PRINTERR("fi_srx_context", ret); return ret; } } return 0; }
static int alloc_ep_res(struct fid_ep *sep) { int i, ret; /* Get number of bits needed to represent ctx_cnt */ while (ctx_cnt >> ++rx_ctx_bits); av_attr.rx_ctx_bits = rx_ctx_bits; ret = ft_alloc_ep_res(fi); if (ret) return ret; txcq_array = calloc(ctx_cnt, sizeof *txcq_array); rxcq_array = calloc(ctx_cnt, sizeof *rxcq_array); tx_ep = calloc(ctx_cnt, sizeof *tx_ep); rx_ep = calloc(ctx_cnt, sizeof *rx_ep); remote_rx_addr = calloc(ctx_cnt, sizeof *remote_rx_addr); if (!buf || !txcq_array || !rxcq_array || !tx_ep || !rx_ep || !remote_rx_addr) { perror("malloc"); return -1; } for (i = 0; i < ctx_cnt; i++) { ret = fi_tx_context(sep, i, NULL, &tx_ep[i], NULL); if (ret) { FT_PRINTERR("fi_tx_context", ret); return ret; } ret = fi_cq_open(domain, &cq_attr, &txcq_array[i], NULL); if (ret) { FT_PRINTERR("fi_cq_open", ret); return ret; } ret = fi_rx_context(sep, i, NULL, &rx_ep[i], NULL); if (ret) { FT_PRINTERR("fi_rx_context", ret); return ret; } ret = fi_cq_open(domain, &cq_attr, &rxcq_array[i], NULL); if (ret) { FT_PRINTERR("fi_cq_open", ret); return ret; } } return 0; }
int ft_alloc_active_res(struct fi_info *fi) { int ret; ret = ft_alloc_ep_res(fi); if (ret) return ret; ret = fi_endpoint(domain, fi, &ep, NULL); if (ret) { FT_PRINTERR("fi_endpoint", ret); return ret; } return 0; }