static void free_ep_res(void) { fi_close(&av->fid); fi_close(&mr->fid); FT_CLOSEV(rx_ep, ctx_cnt); FT_CLOSEV(tx_ep, ctx_cnt); FT_CLOSEV(rcq, ctx_cnt); FT_CLOSEV(scq, ctx_cnt); free(buf); free(rcq); free(scq); free(tx_ep); free(rx_ep); }
static void free_ep_res(void) { FT_CLOSEV(ep, ep_cnt); fi_close(&av->fid); fi_close(&mr->fid); fi_close(&rcq->fid); fi_close(&srx_ctx->fid); fi_close(&scq->fid); fi_close(&stx_ctx->fid); free(buf); free(remote_fi_addr); }
static int alloc_ep_res(struct fi_info *fi) { struct fi_cq_attr cq_attr; struct fi_rx_attr rx_attr; struct fi_tx_attr tx_attr; struct fi_av_attr av_attr; int i, ret = 0; buffer_size = test_size[TEST_CNT - 1].size; buf = malloc(buffer_size); remote_fi_addr = (fi_addr_t *)malloc(sizeof(*remote_fi_addr) * ep_cnt); if (!buf || !remote_fi_addr) { perror("malloc"); goto err1; } memset(&cq_attr, 0, sizeof cq_attr); cq_attr.format = FI_CQ_FORMAT_CONTEXT; cq_attr.wait_obj = FI_WAIT_NONE; cq_attr.size = rx_depth; memset(&tx_attr, 0, sizeof tx_attr); memset(&rx_attr, 0, sizeof rx_attr); ret = fi_stx_context(dom, &tx_attr, &stx_ctx, NULL); if (ret) { FT_PRINTERR("fi_stx_context", ret); goto err1; } ret = fi_cq_open(dom, &cq_attr, &scq, NULL); if (ret) { FT_PRINTERR("fi_cq_open", ret); goto err2; } ret = fi_srx_context(dom, &rx_attr, &srx_ctx, NULL); if (ret) { FT_PRINTERR("fi_srx_context", ret); goto err3; } ret = fi_cq_open(dom, &cq_attr, &rcq, NULL); if (ret) { FT_PRINTERR("fi_cq_open", ret); goto err4; } ret = fi_mr_reg(dom, buf, buffer_size, 0, 0, 0, 0, &mr, NULL); if (ret) { FT_PRINTERR("fi_mr_reg", ret); goto err5; } memset(&av_attr, 0, sizeof av_attr); av_attr.type = fi->domain_attr->av_type ? fi->domain_attr->av_type : FI_AV_MAP; av_attr.count = ep_cnt; ret = fi_av_open(dom, &av_attr, &av, NULL); if (ret) { FT_PRINTERR("fi_av_open", ret); goto err6; } ep = calloc(ep_cnt, sizeof(*ep)); if (!ep) { perror("malloc"); goto err7; } for (i = 0; i < ep_cnt; i++) { ret = fi_endpoint(dom, fi, &ep[i], NULL); if (ret) { FT_PRINTERR("fi_endpoint", ret); goto err8; } } return 0; err8: FT_CLOSEV(ep, ep_cnt); err7: fi_close(&av->fid); err6: fi_close(&mr->fid); err5: fi_close(&rcq->fid); err4: fi_close(&srx_ctx->fid); err3: fi_close(&scq->fid); err2: fi_close(&stx_ctx->fid); err1: free(buf); free(remote_fi_addr); return ret; }
static int alloc_ep_res(struct fid_ep *sep) { struct fi_cq_attr cq_attr; struct fi_rx_attr rx_attr; struct fi_tx_attr tx_attr; struct fi_av_attr av_attr; int i, ret; buffer_size = test_size[TEST_CNT - 1].size; buf = malloc(buffer_size); scq = calloc(ctx_cnt, sizeof *scq); rcq = calloc(ctx_cnt, sizeof *rcq); 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 || !scq || !rcq || !tx_ep || !rx_ep || !remote_rx_addr) { perror("malloc"); return -1; } memset(&cq_attr, 0, sizeof cq_attr); cq_attr.format = FI_CQ_FORMAT_CONTEXT; cq_attr.wait_obj = FI_WAIT_NONE; cq_attr.size = rx_depth; for (i = 0; i < ctx_cnt; i++) { /* Create TX contexts: tx_ep */ ret = fi_tx_context(sep, i, &tx_attr, &tx_ep[i], NULL); if (ret) { FT_PRINTERR("fi_tx_context", ret); goto err1; } ret = fi_cq_open(dom, &cq_attr, &scq[i], NULL); if (ret) { FT_PRINTERR("fi_cq_open", ret); goto err2; } } for (i = 0; i < ctx_cnt; i++) { /* Create RX contexts: rx_ep */ ret = fi_rx_context(sep, i, &rx_attr, &rx_ep[i], NULL); if (ret) { FT_PRINTERR("fi_tx_context", ret); goto err3; } ret = fi_cq_open(dom, &cq_attr, &rcq[i], NULL); if (ret) { FT_PRINTERR("fi_cq_open", ret); goto err4; } } ret = fi_mr_reg(dom, buf, buffer_size, 0, 0, 0, 0, &mr, NULL); if (ret) { FT_PRINTERR("fi_mr_reg", ret); goto err5; } /* Get number of bits needed to represent ctx_cnt */ while (ctx_cnt >> ++rx_ctx_bits) ; memset(&av_attr, 0, sizeof av_attr); av_attr.type = fi->domain_attr->av_type ? fi->domain_attr->av_type : FI_AV_MAP; av_attr.count = 1; av_attr.rx_ctx_bits = rx_ctx_bits; /* Open Address Vector */ ret = fi_av_open(dom, &av_attr, &av, NULL); if (ret) { FT_PRINTERR("fi_av_open", ret); goto err6; } return 0; err6: fi_close(&mr->fid); err5: FT_CLOSEV(rcq, ctx_cnt); err4: FT_CLOSEV(rx_ep, ctx_cnt); err3: FT_CLOSEV(scq, ctx_cnt); err2: FT_CLOSEV(tx_ep, ctx_cnt); err1: free(buf); free(rcq); free(scq); free(tx_ep); free(rx_ep); free(remote_rx_addr); return ret; }