On Mon, May 11, 2026 at 05:30:33AM -0400, Jon Maloy wrote:
On 2026-04-16 11:57, Laurent Vivier wrote:
udp_vu_sock_recv() currently mixes two concerns: receiving data from the socket and managing virtqueue buffers (collecting, rewinding, releasing). This makes the function harder to reason about and couples socket I/O with virtqueue state.
Move all virtqueue operations, vu_collect(), vu_init_elem(), vu_queue_rewind(), vu_set_vnethdr(), and the queue-readiness check, into udp_vu_sock_to_tap(), which is the only caller. This turns udp_vu_sock_recv() into a pure socket receive function that simply reads into the provided iov array and adjusts its length.
Signed-off-by: Laurent Vivier
Reviewed-by: David Gibson Reviewed-by: Jon Maloy
see below.
--- udp_vu.c | 98 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 50 insertions(+), 48 deletions(-)
diff --git a/udp_vu.c b/udp_vu.c index f8629af58ab5..bd9fd5abb971 100644 --- a/udp_vu.c [...] + + if (!vu_queue_enabled(vq) || !vu_queue_started(vq)) { + struct msghdr msg = { 0 }; + + debug("Got UDP packet, but RX virtqueue not usable yet"); + + for (i = 0; i < n; i++) { + if (recvmsg(s, &msg, MSG_DONTWAIT) < 0) + debug_perror("Failed to discard datagram"); + } + + return; + } + for (i = 0; i < n; i++) { + unsigned elem_cnt, elem_used;
unsigned int is standard in our code, I think.
I think Laurent has usually used 'unsigned int', but I've usually used 'unsigned'. -- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson