Esempio n. 1
0
static int util_wait_fd_run(struct fid_wait *wait_fid, int timeout)
{
	struct util_wait_fd *wait;
	uint64_t start;
	void *ep_context[1];
	int ret;

	wait = container_of(wait_fid, struct util_wait_fd, util_wait.wait_fid);
	start = (timeout >= 0) ? fi_gettime_ms() : 0;

	while (1) {
		ret = wait->util_wait.wait_try(&wait->util_wait);
		if (ret)
			return ret == -FI_EAGAIN ? 0 : ret;

		if (timeout >= 0) {
			timeout -= (int) (fi_gettime_ms() - start);
			if (timeout <= 0)
				return -FI_ETIMEDOUT;
		}

		ret = fi_epoll_wait(wait->epoll_fd, ep_context, 1, timeout);
		if (ret < 0) {
			FI_WARN(wait->util_wait.prov, FI_LOG_FABRIC,
				"poll failed\n");
			return ret;
		}
	}
}
Esempio n. 2
0
static int util_wait_fd_run(struct fid_wait *wait_fid, int timeout)
{
	struct util_wait_fd *wait;
	uint64_t start;
	void *context;
	int ret;

	wait = container_of(wait_fid, struct util_wait_fd, util_wait.wait_fid);
	start = (timeout >= 0) ? fi_gettime_ms() : 0;

	while (1) {
		fd_signal_reset(&wait->signal);

		ret = fi_poll(&wait->util_wait.pollset->poll_fid, &context, 1);
		if (ret > 0)
			return 0;
		else if (ret < 0)
			return ret;

		if (timeout >= 0) {
			timeout -= (int) (fi_gettime_ms() - start);
			if (timeout <= 0)
				return -FI_ETIMEDOUT;
		}

		context = fi_epoll_wait(wait->epoll_fd, timeout);
	}
}
Esempio n. 3
0
void tcpx_conn_mgr_run(struct util_eq *eq)
{
	struct util_wait_fd *wait_fd;
	void *wait_contexts[MAX_EPOLL_EVENTS];
	int num_fds = 0, i;

	assert(eq->wait != NULL);

	wait_fd = container_of(eq->wait, struct util_wait_fd,
			       util_wait);

	num_fds = fi_epoll_wait(wait_fd->epoll_fd, wait_contexts,
				MAX_EPOLL_EVENTS, 0);
	if (num_fds < 0)
		return;

	for ( i = 0; i < num_fds; i++) {

		/* skip wake up signals */
		if (&wait_fd->util_wait.wait_fid.fid == wait_contexts[i])
			continue;

		process_cm_ctx(eq->wait,
			       (struct tcpx_cm_context *)
			       wait_contexts[i]);
	}
}