static int fi_ibv_check_hints(uint32_t version, const struct fi_info *hints, const struct fi_info *info) { int ret; uint64_t prov_mode; if (hints->caps & ~(info->caps)) { VERBS_INFO(FI_LOG_CORE, "Unsupported capabilities\n"); FI_INFO_CHECK(&fi_ibv_prov, info, hints, caps, FI_TYPE_CAPS); return -FI_ENODATA; } prov_mode = ofi_mr_get_prov_mode(version, hints, info); if ((hints->mode & prov_mode) != prov_mode) { VERBS_INFO(FI_LOG_CORE, "needed mode not set\n"); FI_INFO_MODE(&fi_ibv_prov, prov_mode, hints->mode); return -FI_ENODATA; } if (hints->fabric_attr) { ret = ofi_check_fabric_attr(&fi_ibv_prov, info->fabric_attr, hints->fabric_attr); if (ret) return ret; } if (hints->domain_attr) { ret = ofi_check_domain_attr(&fi_ibv_prov, version, info->domain_attr, hints->domain_attr); if (ret) return ret; } if (hints->ep_attr) { ret = fi_ibv_check_ep_attr(hints->ep_attr, info); if (ret) return ret; } if (hints->rx_attr) { ret = fi_ibv_check_rx_attr(hints->rx_attr, hints, info); if (ret) return ret; } if (hints->tx_attr) { ret = fi_ibv_check_tx_attr(hints->tx_attr, hints, info); if (ret) return ret; } return 0; }
int fi_ibv_open_ep(struct fid_domain *domain, struct fi_info *info, struct fid_ep **ep, void *context) { struct fi_ibv_domain *dom; struct fi_ibv_msg_ep *_ep; struct fi_ibv_connreq *connreq; struct fi_ibv_pep *pep; struct fi_info *fi; int ret; dom = container_of(domain, struct fi_ibv_domain, domain_fid); if (strcmp(dom->verbs->device->name, info->domain_attr->name)) { VERBS_INFO(FI_LOG_DOMAIN, "Invalid info->domain_attr->name\n"); return -FI_EINVAL; } fi = fi_ibv_get_verbs_info(info->domain_attr->name); if (!fi) { VERBS_INFO(FI_LOG_DOMAIN, "Unable to find matching verbs_info\n"); return -FI_EINVAL; } if (info->ep_attr) { ret = fi_ibv_check_ep_attr(info->ep_attr, fi); if (ret) return ret; } if (info->tx_attr) { ret = fi_ibv_check_tx_attr(info->tx_attr, info, fi); if (ret) return ret; } if (info->rx_attr) { ret = fi_ibv_check_rx_attr(info->rx_attr, info, fi); if (ret) return ret; } _ep = fi_ibv_alloc_msg_ep(info); if (!_ep) return -FI_ENOMEM; if (!info->handle) { ret = fi_ibv_create_ep(NULL, NULL, 0, info, NULL, &_ep->id); if (ret) goto err; } else if (info->handle->fclass == FI_CLASS_CONNREQ) { connreq = container_of(info->handle, struct fi_ibv_connreq, handle); _ep->id = connreq->id; } else if (info->handle->fclass == FI_CLASS_PEP) {
static int fi_ibv_check_hints(const struct fi_info *hints, const struct fi_info *info) { int ret; if (hints->caps & ~(info->caps)) { FI_INFO(&fi_ibv_prov, FI_LOG_CORE, "Unsupported capabilities\n"); return -FI_ENODATA; } if ((hints->mode & info->mode) != info->mode) { FI_INFO(&fi_ibv_prov, FI_LOG_CORE, "Required hints mode bits not set. Expected:0x%llx" " Given:0x%llx\n", info->mode, hints->mode); return -FI_ENODATA; } if (hints->fabric_attr) { ret = fi_ibv_check_fabric_attr(hints->fabric_attr, info); if (ret) return ret; } if (hints->domain_attr) { ret = fi_ibv_check_domain_attr(hints->domain_attr, info); if (ret) return ret; } if (hints->ep_attr) { ret = fi_ibv_check_ep_attr(hints->ep_attr, info); if (ret) return ret; } if (hints->rx_attr) { ret = fi_ibv_check_rx_attr(hints->rx_attr, hints, info); if (ret) return ret; } if (hints->tx_attr) { ret = fi_ibv_check_tx_attr(hints->tx_attr, hints, info); if (ret) return ret; } return 0; }