From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: passt.top; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=Vg9Yd83j; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by passt.top (Postfix) with ESMTPS id 510095A0265 for ; Mon, 11 May 2026 11:30:38 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778491837; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=RP/ibSLKVto6d1KHafAG9o8tnjT9KwKbbHNpeimrdiE=; b=Vg9Yd83jULHEzC5STjxyDfOuqwE+tZu5BgA2zHJNpvbe20JRJDg/LgczxPiivw3Y94QraI LvjWJRxRBkTsuOfhi8BNRRXGPJ4+CQ7YhlgCZYgKFBtx13ChuEa7uA5rdmdC0gl9nA6eRZ XKzKQ0B9E9VgOoJRiibADTcjkS5uom4= Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-347-62z_Tfe5Opa4IewPMGQBng-1; Mon, 11 May 2026 05:30:35 -0400 X-MC-Unique: 62z_Tfe5Opa4IewPMGQBng-1 X-Mimecast-MFC-AGG-ID: 62z_Tfe5Opa4IewPMGQBng_1778491835 Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-909db142e45so232356485a.1 for ; Mon, 11 May 2026 02:30:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778491835; x=1779096635; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=RP/ibSLKVto6d1KHafAG9o8tnjT9KwKbbHNpeimrdiE=; b=WLgAW9JfbTp2iZkN5z/QLnXJM5K7ubs3n6+xmBwsDVapytBNl/4WBqhBg9vuZ66jYy Y/bjTWto2qFHdU3xxC6qIrvonwDR5MczPfk4pAMEKTonPMrdQJ8IYmS3yFnjNndT0/Ny 72wCJwwrH1hYLkV+8Sr6RRjh5yP2JOikOYnWVvKNwzVF3nK/XoWKWEYM4SRBgu/kQuG4 cmX+RZoG11VtgvsZiVlJ7wjh2uFOhhSCgodMamrCorJObefiZQ1fAYqpOo3yPewNorgO aKMNoHTwU8JUQhT/ovGUrqedFAbztY7jLo5XxlQCQen8/Z+OQknF10N2PA8Yk8ifCUV9 bOcA== X-Forwarded-Encrypted: i=1; AFNElJ+hcEoJN24gcPItSORxX9QbK5rfJ0o1JyJPrVcyXwl1M3xwWeDTG0Xd5Arz+tCdXlXZgn26Myb99as=@passt.top X-Gm-Message-State: AOJu0YyBAu0WinEplksfU+c0ybxgPqFebOMzUuYsbansX2F5Bw3ifVnH lbtwNwqBj+pF8x60wC/FfzQIlP7nv+mAyyJjK2MxiWlxmTgPHHKXOw78t1zqxgcH9KcvWTxEddq n1Cut2se2f8Mfmm6OF5anWIn8OoZswnu8o/N+J1/3b48Om7FyqCFGxA== X-Gm-Gg: Acq92OFPn/7ekP/UH/xOqEErf3201SPThIUD+bNlxyY7cJlcQd0oc6lkipE7OukAbaE G39oPr8mjNC5ty2eveNVAiVSSzUQZAtpdPBvyEKYW8HCsLke+fVH9tUrRb2gchEys/ehY1KLOyM hWPXOILtwvQvf5apxba0jBG0K2hnDLBYBCKZ4QSGN9yz7lGzuEQDnu9tGHP55lBmX+5zu9J+f5t NiXPvuTP/yc0NqKdmnq5U6UptQeYfnizi6Bz+SufmP7BHkeiarik3ZBdCkAObb3FLyyi0kBDqJ8 zmHE7t4yYzDLfTZDFpq2f+lPF2pOG3BXpTEaKZdEyFgRNM+u0pLm9fwQlGLUKCEwJw6tSHclZSN 5rcooTf3NZSzhj9Tx+o41qn2Lc5Pp+xkcmRTB3LBXweNuoC+H8pMbVXNnA0TuEKR6eswoW1vUqw MpNWhiKKVYHf2V X-Received: by 2002:a05:620a:4494:b0:8ef:6b87:5c4e with SMTP id af79cd13be357-9065324734emr2273473185a.20.1778491834957; Mon, 11 May 2026 02:30:34 -0700 (PDT) X-Received: by 2002:a05:620a:4494:b0:8ef:6b87:5c4e with SMTP id af79cd13be357-9065324734emr2273470385a.20.1778491834466; Mon, 11 May 2026 02:30:34 -0700 (PDT) Received: from [192.168.2.15] (lnsm4-toronto63-142-116-28-118.internet.virginmobile.ca. [142.116.28.118]) by smtp.gmail.com with ESMTPSA id af79cd13be357-907b87c02fbsm1067429185a.25.2026.05.11.02.30.33 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 11 May 2026 02:30:34 -0700 (PDT) Message-ID: <93635d2b-0e17-4285-8089-cd7e3f7b6ad1@redhat.com> Date: Mon, 11 May 2026 05:30:33 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 04/10] udp_vu: Move virtqueue management from udp_vu_sock_recv() to its caller To: Laurent Vivier , passt-dev@passt.top References: <20260416155721.3807225-1-lvivier@redhat.com> <20260416155721.3807225-5-lvivier@redhat.com> From: Jon Maloy In-Reply-To: <20260416155721.3807225-5-lvivier@redhat.com> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: rWFVwVxBtCHQwcZ2_GDAGeVNNHi2lVjmQHirf7mms7c_1778491835 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Message-ID-Hash: KIKPSYGFGEA2SPHRCVDJ3AJBZHUP2MSL X-Message-ID-Hash: KIKPSYGFGEA2SPHRCVDJ3AJBZHUP2MSL X-MailFrom: jmaloy@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: David Gibson X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: 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. /jon > + size_t iov_cnt; > ssize_t dlen; > - int iov_used; > > - iov_used = udp_vu_sock_recv(c, vq, s, v6, &dlen); > - if (iov_used < 0) > + elem_cnt = vu_collect(vdev, vq, elem, ARRAY_SIZE(elem), > + iov_vu, ARRAY_SIZE(iov_vu), &iov_cnt, > + IP_MAX_MTU + ETH_HLEN + VNET_HLEN, NULL); > + if (elem_cnt == 0) > + break; > + > + assert((size_t)elem_cnt == iov_cnt); /* one iovec per element */ > + > + dlen = udp_vu_sock_recv(s, v6, &iov_cnt); > + if (dlen < 0) { > + vu_queue_rewind(vq, iov_cnt); > break; > + } > + > + elem_used = iov_cnt; /* one iovec per element */ > + > + /* release unused buffers */ > + vu_queue_rewind(vq, elem_cnt - elem_used); > > - if (iov_used > 0) { > + if (iov_cnt > 0) { > udp_vu_prepare(c, toside, dlen); > if (*c->pcap) { > - udp_vu_csum(toside, iov_used); > - pcap_iov(iov_vu, iov_used, VNET_HLEN); > + udp_vu_csum(toside, iov_cnt); > + pcap_iov(iov_vu, iov_cnt, VNET_HLEN); > } > - vu_flush(vdev, vq, elem, iov_used); > + vu_flush(vdev, vq, elem, iov_cnt); > vu_queue_notify(vdev, vq); > } > }