int ofi_get_core_info(uint32_t version, const char *node, const char *service, uint64_t flags, const struct util_prov *util_prov, const struct fi_info *util_hints, ofi_alter_info_t info_to_core, struct fi_info **core_info) { struct fi_info *core_hints = NULL; int ret; ret = ofi_prov_check_info(util_prov, version, util_hints); if (ret) return ret; ret = ofi_info_to_core(version, util_prov->prov, util_hints, info_to_core, &core_hints); if (ret) return ret; FI_DBG(util_prov->prov, FI_LOG_CORE, "--- Begin ofi_get_core_info ---\n"); ret = fi_getinfo(version, node, service, flags | OFI_CORE_PROV_ONLY, core_hints, core_info); FI_DBG(util_prov->prov, FI_LOG_CORE, "--- End ofi_get_core_info ---\n"); fi_freeinfo(core_hints); return ret; }
int ofi_endpoint_init(struct fid_domain *domain, const struct util_prov *util_prov, struct fi_info *info, struct util_ep *ep, void *context, ofi_ep_progress_func progress) { struct util_domain *util_domain; int ret; util_domain = container_of(domain, struct util_domain, domain_fid); if (!info || !info->ep_attr || !info->rx_attr || !info->tx_attr) return -FI_EINVAL; ret = ofi_prov_check_info(util_prov, util_domain->fabric->fabric_fid.api_version, info); if (ret) return ret; ep->ep_fid.fid.fclass = FI_CLASS_EP; ep->ep_fid.fid.context = context; ep->domain = util_domain; ep->caps = info->caps; ep->progress = progress; ep->tx_op_flags = info->tx_attr->op_flags; ep->rx_op_flags = info->rx_attr->op_flags; ofi_atomic_inc32(&util_domain->ref); if (util_domain->eq) ofi_ep_bind_eq(ep, util_domain->eq); fastlock_init(&ep->lock); return 0; }
int ofi_endpoint_init(struct fid_domain *domain, const struct util_prov *util_prov, struct fi_info *info, struct util_ep *ep, void *context, ofi_ep_progress_func progress) { struct util_domain *util_domain; int ret; util_domain = container_of(domain, struct util_domain, domain_fid); if (!info || !info->ep_attr || !info->rx_attr || !info->tx_attr) return -FI_EINVAL; ret = ofi_prov_check_info(util_prov, util_domain->fabric->fabric_fid.api_version, info); if (ret) return ret; ep->ep_fid.fid.fclass = FI_CLASS_EP; ep->ep_fid.fid.context = context; ep->domain = util_domain; ep->caps = info->caps; ep->flags = 0; ep->progress = progress; ep->tx_op_flags = info->tx_attr->op_flags; ep->rx_op_flags = info->rx_attr->op_flags; ep->tx_msg_flags = 0; ep->rx_msg_flags = 0; ep->inject_op_flags = ((info->tx_attr->op_flags & ~(FI_COMPLETION | FI_INJECT_COMPLETE | FI_TRANSMIT_COMPLETE | FI_DELIVERY_COMPLETE)) | FI_INJECT); ep->tx_cntr_inc = ofi_cntr_inc_noop; ep->rx_cntr_inc = ofi_cntr_inc_noop; ep->rd_cntr_inc = ofi_cntr_inc_noop; ep->wr_cntr_inc = ofi_cntr_inc_noop; ep->rem_rd_cntr_inc = ofi_cntr_inc_noop; ep->rem_wr_cntr_inc = ofi_cntr_inc_noop; ep->type = info->ep_attr->type; ofi_atomic_inc32(&util_domain->ref); if (util_domain->eq) ofi_ep_bind_eq(ep, util_domain->eq); fastlock_init(&ep->lock); if (ep->domain->threading != FI_THREAD_SAFE) { ep->lock_acquire = ofi_fastlock_acquire_noop; ep->lock_release = ofi_fastlock_release_noop; } else { ep->lock_acquire = ofi_fastlock_acquire; ep->lock_release = ofi_fastlock_release; } return 0; }