Esempio n. 1
0
static
void pscom_extoll_rma2_do_write(pscom_con_t *con)
{
	unsigned int len;
	struct iovec iov[2];
	pscom_req_t *req;

	req = pscom_write_get_iov(con, iov);

	if (req) {
		psex_con_info_t *ci = con->arch.extoll.ci;
		len = iov[0].iov_len + iov[1].iov_len;

		int rlen = psex_sendv(ci, iov, len);

		if (rlen >= 0) {
			pscom_write_done(con, req, rlen);
		} else if ((rlen == -EINTR) || (rlen == -EAGAIN)) {
			// Busy: Maybe out of tokens? try to read more tokens:
			_pscom_extoll_rma2_do_read(con, ci);
		} else {
			// Error
			pscom_con_error(con, PSCOM_OP_WRITE, PSCOM_ERR_STDERROR);
		}
	}
}
Esempio n. 2
0
static
void _psex_send_tokens(psex_con_info_t *con_info)
{
	if (con_info->n_tosend_toks >= psex_pending_tokens) {
		if (psex_sendv(con_info, NULL, 0) == -EAGAIN) {
			psex_stat.busy_token_refresh++;
		}
	}
}