#include <stdlib.h>
#include <string.h>
#include <fi_enosys.h>
#include <fi_util.h>
int ofi_fabric_close(struct util_fabric *fabric)
{
if (ofi_atomic_get32(&fabric->ref))
return -FI_EBUSY;
ofi_fabric_remove(fabric);
free((char *)fabric->name);
fastlock_destroy(&fabric->lock);
return 0;
}
int ofi_fabric_init(const struct fi_provider *prov,
const struct fi_fabric_attr *prov_attr,
const struct fi_fabric_attr *user_attr,
struct util_fabric *fabric, void *context)
{
int ret;
ret = ofi_check_fabric_attr(prov, prov_attr, user_attr);
if (ret)
return ret;
fabric->prov = prov;
ofi_atomic_initialize32(&fabric->ref, 0);
dlist_init(&fabric->domain_list);
fastlock_init(&fabric->lock);
if (!(fabric->name = strdup(user_attr->name)))
return -FI_ENOMEM;
fabric->fabric_fid.fid.fclass = FI_CLASS_FABRIC;
fabric->fabric_fid.fid.context = context;
ofi_fabric_insert(fabric);
return 0;
}