Exemplo n.º 1
0
int psmx_wait_open(struct fid_domain *domain, struct fi_wait_attr *attr,
		   struct fid_wait **waitset)
{
	struct psmx_fid_domain *domain_priv;
	struct psmx_fid_wait *wait_priv;
	int type = FI_WAIT_FD;
	int err;

	domain_priv = container_of(domain, struct psmx_fid_domain, domain);

	if (attr) {
		switch (attr->wait_obj) {
		case FI_WAIT_UNSPEC:
			break;

		case FI_WAIT_FD:
		case FI_WAIT_MUTEX_COND:
			type = attr->wait_obj;
			break;
	 
		default:
			psmx_debug("%s: attr->wait_obj=%d, supported=%d,%d,%d\n",
					__func__, attr->wait_obj, FI_WAIT_UNSPEC,
					FI_WAIT_FD, FI_WAIT_MUTEX_COND);
			return -FI_EINVAL;
		}
	}

	wait_priv = calloc(1, sizeof(*wait_priv));
	if (!wait_priv)
		return -FI_ENOMEM;
	
	err = psmx_wait_init(wait_priv, type);
	if (err) {
		free(wait_priv);
		return err;
	}

	wait_priv->wait.fid.fclass = FI_CLASS_WAIT;
	wait_priv->wait.fid.context = 0;
	wait_priv->wait.fid.ops = &psmx_fi_ops;
	wait_priv->wait.ops = &psmx_wait_ops;
	wait_priv->domain = domain_priv;

	*waitset = &wait_priv->wait;
	return 0;
}
Exemplo n.º 2
0
int psmx_wait_open(struct fid_fabric *fabric, struct fi_wait_attr *attr,
		   struct fid_wait **waitset)
{
	struct psmx_fid_wait *wait_priv;
	int type = FI_WAIT_FD;
	int err;

	if (attr) {
		switch (attr->wait_obj) {
		case FI_WAIT_UNSPEC:
			break;

		case FI_WAIT_FD:
		case FI_WAIT_MUTEX_COND:
			type = attr->wait_obj;
			break;
	 
		default:
			FI_INFO(&psmx_prov, FI_LOG_EQ,
				"attr->wait_obj=%d, supported=%d,%d,%d\n",
				attr->wait_obj, FI_WAIT_UNSPEC,
				FI_WAIT_FD, FI_WAIT_MUTEX_COND);
			return -FI_EINVAL;
		}
	}

	wait_priv = calloc(1, sizeof(*wait_priv));
	if (!wait_priv)
		return -FI_ENOMEM;
	
	err = psmx_wait_init(wait_priv, type);
	if (err) {
		free(wait_priv);
		return err;
	}

	wait_priv->fabric = container_of(fabric, struct psmx_fid_fabric, fabric);
	wait_priv->wait.fid.fclass = FI_CLASS_WAIT;
	wait_priv->wait.fid.context = 0;
	wait_priv->wait.fid.ops = &psmx_fi_ops;
	wait_priv->wait.ops = &psmx_wait_ops;

	*waitset = &wait_priv->wait;
	return 0;
}