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