aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorLaurent Vivier <lvivier@redhat.com>2025-09-05 17:49:34 +0200
committerStefano Brivio <sbrivio@redhat.com>2025-09-09 21:14:32 +0200
commited18d4c7ee69140723754ae8fe381927dfaab075 (patch)
treefdabd51fd93956b7bf8d02701524bfa0c334dd37
parent62399155319479f86b07d259b284f6a2991aaba7 (diff)
downloadpasst-ed18d4c7ee69140723754ae8fe381927dfaab075.tar
passt-ed18d4c7ee69140723754ae8fe381927dfaab075.tar.gz
passt-ed18d4c7ee69140723754ae8fe381927dfaab075.tar.bz2
passt-ed18d4c7ee69140723754ae8fe381927dfaab075.tar.lz
passt-ed18d4c7ee69140723754ae8fe381927dfaab075.tar.xz
passt-ed18d4c7ee69140723754ae8fe381927dfaab075.tar.zst
passt-ed18d4c7ee69140723754ae8fe381927dfaab075.zip
udp_vu: Pass virtqueue pointer to udp_vu_sock_recv()
Pass the virtqueue pointer to udp_vu_sock_recv() to enable proper queue selection for multiqueue support. This ensures that received packets are processed on the same virtqueue as the caller. Signed-off-by: Laurent Vivier <lvivier@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r--udp_vu.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/udp_vu.c b/udp_vu.c
index 2fb7b90..099677f 100644
--- a/udp_vu.c
+++ b/udp_vu.c
@@ -60,16 +60,17 @@ static size_t udp_vu_hdrlen(bool v6)
/**
* udp_vu_sock_recv() - Receive datagrams from socket into vhost-user buffers
* @c: Execution context
+ * @vq: virtqueue to use to receive data
* @s: Socket to receive from
* @v6: Set for IPv6 connections
* @dlen: Size of received data (output)
*
* Return: number of iov entries used to store the datagram
*/
-static int udp_vu_sock_recv(const struct ctx *c, int s, bool v6, ssize_t *dlen)
+static int udp_vu_sock_recv(const struct ctx *c, struct vu_virtq *vq, int s,
+ bool v6, ssize_t *dlen)
{
- struct vu_dev *vdev = c->vdev;
- struct vu_virtq *vq = &vdev->vq[VHOST_USER_RX_QUEUE];
+ const struct vu_dev *vdev = c->vdev;
int iov_cnt, idx, iov_used;
struct msghdr msg = { 0 };
size_t off, hdrlen;
@@ -210,7 +211,7 @@ void udp_vu_sock_to_tap(const struct ctx *c, int s, int n, flow_sidx_t tosidx)
ssize_t dlen;
int iov_used;
- iov_used = udp_vu_sock_recv(c, s, v6, &dlen);
+ iov_used = udp_vu_sock_recv(c, vq, s, v6, &dlen);
if (iov_used <= 0)
break;