Beispiel #1
0
ssize_t
usdf_dgram_send(struct fid_ep *fep, const void *buf, size_t len, void *desc,
		fi_addr_t dest_addr, void *context)
{
	struct usdf_dest *dest;
	struct usdf_ep *ep;
	uint32_t flags;

	ep = ep_ftou(fep);
	dest = (struct usdf_dest *)(uintptr_t) dest_addr;
	flags = (ep->ep_tx_completion) ? USD_SF_SIGNAL : 0;

	if (len + sizeof(struct usd_udp_hdr) <= USD_SEND_MAX_COPY) {
		return usd_post_send_one_copy(ep->e.dg.ep_qp, &dest->ds_dest,
						buf, len, flags,
						context);
	} else if (ep->e.dg.tx_op_flags & FI_INJECT) {
		USDF_DBG_SYS(EP_DATA,
				"given inject length (%zu) exceeds max inject length (%d)\n",
				len + sizeof(struct usd_udp_hdr),
				USD_SEND_MAX_COPY);
		return -FI_ENOSPC;
	}

	return usd_post_send_one(ep->e.dg.ep_qp, &dest->ds_dest, buf, len,
				flags, context);
}
static inline ssize_t
_usdf_dgram_send(struct usdf_ep *ep, struct usdf_dest *dest,
		const void *buf, size_t len,  void *context)
{
	if (len <= USD_SEND_MAX_COPY - sizeof(struct usd_udp_hdr)) {
		return usd_post_send_one_copy(ep->e.dg.ep_qp,
			&dest->ds_dest, buf, len, USD_SF_SIGNAL, context);
	} else {
		return usd_post_send_one(ep->e.dg.ep_qp, &dest->ds_dest,
			buf, len, USD_SF_SIGNAL, context);
	}
}