From ffa47f01f7b36c332a71f35dc211e1d0a88cd6b6 Mon Sep 17 00:00:00 2001 From: Sylvain Didelot Date: Thu, 27 Oct 2022 10:27:18 +0200 Subject: [PATCH] prov/net: Enable io_uring send/sendv through sockapi Signed-off-by: Sylvain Didelot --- prov/net/src/xnet.h | 1 + prov/net/src/xnet_ep.c | 12 ++---------- prov/net/src/xnet_progress.c | 22 ++++++++++++++++++++++ 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/prov/net/src/xnet.h b/prov/net/src/xnet.h index 9366273a8cd..6871dd9343c 100644 --- a/prov/net/src/xnet.h +++ b/prov/net/src/xnet.h @@ -301,6 +301,7 @@ struct xnet_progress { struct xnet_uring tx_uring; struct xnet_uring rx_uring; + struct ofi_sockapi sockapi; struct ofi_dynpoll epoll_fd; diff --git a/prov/net/src/xnet_ep.c b/prov/net/src/xnet_ep.c index 1cd26897dcf..dfa12118ba1 100644 --- a/prov/net/src/xnet_ep.c +++ b/prov/net/src/xnet_ep.c @@ -44,14 +44,6 @@ extern struct fi_ops_rma xnet_rma_ops; extern struct fi_ops_msg xnet_msg_ops; extern struct fi_ops_tagged xnet_tagged_ops; -static struct ofi_sockapi xnet_sockapi = -{ - .send = ofi_sockapi_send_socket, - .sendv = ofi_sockapi_sendv_socket, - .recv = ofi_sockapi_recv_socket, - .recvv = ofi_sockapi_recvv_socket, -}; - void xnet_hdr_none(struct xnet_base_hdr *hdr) { /* no-op */ @@ -630,8 +622,8 @@ int xnet_endpoint(struct fid_domain *domain, struct fi_info *info, if (ret) goto err1; - ofi_bsock_init(&ep->bsock, &xnet_sockapi, xnet_staging_sbuf_size, - xnet_prefetch_rbuf_size); + ofi_bsock_init(&ep->bsock, &xnet_ep2_progress(ep)->sockapi, + xnet_staging_sbuf_size, xnet_prefetch_rbuf_size); if (info->handle) { if (((fid_t) info->handle)->fclass == FI_CLASS_PEP) { pep = container_of(info->handle, struct xnet_pep, diff --git a/prov/net/src/xnet_progress.c b/prov/net/src/xnet_progress.c index a3c7d9049ff..720291baccc 100644 --- a/prov/net/src/xnet_progress.c +++ b/prov/net/src/xnet_progress.c @@ -46,6 +46,22 @@ static ssize_t (*xnet_start_op[ofi_op_write + 1])(struct xnet_ep *ep); +static struct ofi_sockapi xnet_sockapi_uring = +{ + .send = ofi_sockapi_send_uring, + .sendv = ofi_sockapi_sendv_uring, + .recv = ofi_sockapi_recv_socket, + .recvv = ofi_sockapi_recvv_socket, +}; + +static struct ofi_sockapi xnet_sockapi_socket = +{ + .send = ofi_sockapi_send_socket, + .sendv = ofi_sockapi_sendv_socket, + .recv = ofi_sockapi_recv_socket, + .recvv = ofi_sockapi_recvv_socket, +}; + static void xnet_update_pollflag(struct xnet_ep *ep, short pollflag, bool set) { @@ -1164,6 +1180,12 @@ int xnet_init_progress(struct xnet_progress *progress, struct fi_info *info) POLLIN, &progress->rx_uring.fid); if (ret) goto err8; + + progress->sockapi = xnet_sockapi_uring; + progress->sockapi.tx_io_uring = &progress->tx_uring.ring; + progress->sockapi.rx_io_uring = &progress->rx_uring.ring; + } else { + progress->sockapi = xnet_sockapi_socket; } return 0;