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=AmR2mtlR; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by passt.top (Postfix) with ESMTPS id 816A95A0626 for ; Fri, 03 Apr 2026 12:16:46 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1775211405; 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:autocrypt:autocrypt; bh=yTf8y6cQYPMpTGC6INFRG9efNksvnXddrfK1/KgTzwU=; b=AmR2mtlRkCkUOC6jmxOd7HiIYUPE95kB8W7N3VjeefohZ9Jt8AdQ81gLNiXISVJ4fdnvty rargkgGwGbKyCGTebdR6g9kwwfDDwpQYxSjAtpSCiLtdZ64aarzUOCOyOykMfbIy8dC2mB QUV8y2ccic9xfvQz3bO8UBrH+mt6r7s= Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-492-pBDQZRSINRCYZp_R1CwS1g-1; Fri, 03 Apr 2026 06:16:44 -0400 X-MC-Unique: pBDQZRSINRCYZp_R1CwS1g-1 X-Mimecast-MFC-AGG-ID: pBDQZRSINRCYZp_R1CwS1g_1775211403 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-4837bfcfe0dso22903955e9.1 for ; Fri, 03 Apr 2026 03:16:43 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775211403; x=1775816203; h=content-transfer-encoding:in-reply-to:autocrypt: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=yTf8y6cQYPMpTGC6INFRG9efNksvnXddrfK1/KgTzwU=; b=nOO2ILlAjQqEWlTuk+w7a+R7mQnAoJemz3zpu+Qz9hTzyOVcVkh2g+aLcU27zp5j11 lCn6lnQeBTHjmW+LV75QZWw/kIH+CTQ62tSrfyFtOMJfWKIgSjKSVm3xWpJv6AVduDLP c1DwN9vGxzeavYdYjb9bAudQfRVs+vtqbB7AQ3u1oRzaOFsXWJ9IqvrINqcLZZGbzAGB 3beNQSYDNnvdSw43OIQPENpyHYh1knPfuNVd/SxiP59Q9khZ72l9PgXu5QPogOAZwha6 7ZonmVb01MISVZUGmBYMvFOSrU4aqv7/WzEUKylaATP6BXknn0S74ikCD+dfOcDcNrnj 83kQ== X-Gm-Message-State: AOJu0YwxnCniV9a5mDLd3z1vFmV2Zw91d/xdlJbz99BIO0AsbvMdgvx8 uAINB75sXEk8pPmY0wAkDS6OrnMbIF+hsJRYqfaJe891KgtL3SOC6sDVh8JG4mXxmBsiIRL/8SJ E9FBAabKOCt8bzKZD/BljHPZovr/u5TOSmFpe1nk4cR+OARhC6tAkmw== X-Gm-Gg: ATEYQzyGwHxmkDoCjn6tiQNetBwxUBCsB23oUbWMsFLEwM4dmYq/Mt6rfrWduQhLjEM qMwwWD3VgF+cl6ra6avJ0RPOznKcmaiOesLHrruYfzpH/sKUy03YxJ6PGjHJahlbgPUc4LdYIKg 9SoMkHvzP5fvYyAnyK+xw1lTxLgKNflkFj+ZAGb/u7PqwvPMAUi1wsS744M+3SV52vAM9grdaYo 2tf/376tuqLMsQ48mjymPifO6minq+OVbu4EFQVfenRwSkAja/jSbLu9ZZjZlTIy45E808371im WfdBnwmaC6/NXRZiKNRvKrIM+xj/5Z3PMm5d/fZKwdwb+o1+csvF3h4cJIHy8KM5yMQ1C52QG8r ktvbCcsC2Crai0wUVpNSo4FoQVjYu4CRN6xa2SRH4csJFZF+Lcrnhtz4= X-Received: by 2002:a05:600c:474b:b0:485:34b3:8589 with SMTP id 5b1f17b1804b1-488998e3b8bmr34493265e9.31.1775211402774; Fri, 03 Apr 2026 03:16:42 -0700 (PDT) X-Received: by 2002:a05:600c:474b:b0:485:34b3:8589 with SMTP id 5b1f17b1804b1-488998e3b8bmr34492905e9.31.1775211402271; Fri, 03 Apr 2026 03:16:42 -0700 (PDT) Received: from [192.168.100.100] (82-64-211-94.subs.proxad.net. [82.64.211.94]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43d1e4e1c27sm14133145f8f.26.2026.04.03.03.16.41 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 03 Apr 2026 03:16:41 -0700 (PDT) Message-ID: Date: Fri, 3 Apr 2026 12:16:41 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 03/10] vu_common: Move vnethdr setup into vu_flush() To: Stefano Brivio References: <20260401191826.1782394-1-lvivier@redhat.com> <20260401191826.1782394-4-lvivier@redhat.com> <20260403082022.22c563c6@elisabeth> From: Laurent Vivier Autocrypt: addr=lvivier@redhat.com; keydata= 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 In-Reply-To: <20260403082022.22c563c6@elisabeth> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: cCkH4UVoRNJpBaahmmeiqhxPH53yI2yZnUldO8uYCKk_1775211403 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: COT7ANAUDTYCZHGTPWOQHTKZA6DNVSTQ X-Message-ID-Hash: COT7ANAUDTYCZHGTPWOQHTKZA6DNVSTQ X-MailFrom: lvivier@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: passt-dev@passt.top 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 4/3/26 08:20, Stefano Brivio wrote: > On Wed, 1 Apr 2026 21:18:19 +0200 > Laurent Vivier wrote: > >> Every caller of vu_flush() was calling vu_set_vnethdr() beforehand with >> the same pattern. Move it into vu_flush(). >> >> Remove vu_queue_notify() from vu_flush() and let callers invoke it >> explicitly. This allows paths that perform multiple flushes, such as >> tcp_vu_send_flag() and tcp_vu_data_from_sock(), to issue a single guest >> notification at the end. >> >> Signed-off-by: Laurent Vivier >> --- >> tcp_vu.c | 19 ++++++++----------- >> udp_vu.c | 3 +-- >> vu_common.c | 9 +++++---- >> vu_common.h | 1 - >> 4 files changed, 14 insertions(+), 18 deletions(-) >> >> diff --git a/tcp_vu.c b/tcp_vu.c >> index dc0e17c0f03f..0cd01190d612 100644 >> --- a/tcp_vu.c >> +++ b/tcp_vu.c >> @@ -82,7 +82,6 @@ int tcp_vu_send_flag(const struct ctx *c, struct tcp_tap_conn *conn, int flags) >> struct ethhdr *eh; >> uint32_t seq; >> int elem_cnt; >> - int nb_ack; >> int ret; >> >> hdrlen = tcp_vu_hdrlen(CONN_V6(conn)); >> @@ -97,8 +96,6 @@ int tcp_vu_send_flag(const struct ctx *c, struct tcp_tap_conn *conn, int flags) >> assert(flags_elem[0].in_sg[0].iov_len >= >> MAX(hdrlen + sizeof(*opts), ETH_ZLEN + VNET_HLEN)); >> >> - vu_set_vnethdr(flags_elem[0].in_sg[0].iov_base, 1); >> - >> eh = vu_eth(flags_elem[0].in_sg[0].iov_base); >> >> memcpy(eh->h_dest, c->guest_mac, sizeof(eh->h_dest)); >> @@ -143,9 +140,10 @@ int tcp_vu_send_flag(const struct ctx *c, struct tcp_tap_conn *conn, int flags) >> l2len = optlen + hdrlen - VNET_HLEN; >> vu_pad(&flags_elem[0].in_sg[0], l2len); >> >> + vu_flush(vdev, vq, flags_elem, 1); >> + >> if (*c->pcap) >> pcap_iov(&flags_elem[0].in_sg[0], 1, VNET_HLEN); >> - nb_ack = 1; >> >> if (flags & DUP_ACK) { >> elem_cnt = vu_collect(vdev, vq, &flags_elem[1], 1, >> @@ -157,14 +155,14 @@ int tcp_vu_send_flag(const struct ctx *c, struct tcp_tap_conn *conn, int flags) >> memcpy(flags_elem[1].in_sg[0].iov_base, >> flags_elem[0].in_sg[0].iov_base, >> flags_elem[0].in_sg[0].iov_len); >> - nb_ack++; >> + >> + vu_flush(vdev, vq, &flags_elem[1], 1); >> >> if (*c->pcap) >> pcap_iov(&flags_elem[1].in_sg[0], 1, VNET_HLEN); >> } >> } >> - >> - vu_flush(vdev, vq, flags_elem, nb_ack); >> + vu_queue_notify(vdev, vq); >> >> return 0; >> } >> @@ -451,7 +449,6 @@ int tcp_vu_data_from_sock(const struct ctx *c, struct tcp_tap_conn *conn) >> assert(frame_size >= hdrlen); >> >> dlen = frame_size - hdrlen; >> - vu_set_vnethdr(iov->iov_base, buf_cnt); >> >> /* The IPv4 header checksum varies only with dlen */ >> if (previous_dlen != dlen) >> @@ -464,14 +461,14 @@ int tcp_vu_data_from_sock(const struct ctx *c, struct tcp_tap_conn *conn) >> l2len = dlen + hdrlen - VNET_HLEN; >> vu_pad(iov, l2len); >> >> + vu_flush(vdev, vq, &elem[head[i]], buf_cnt); >> + >> if (*c->pcap) >> pcap_iov(iov, buf_cnt, VNET_HLEN); >> >> conn->seq_to_tap += dlen; >> } >> - >> - /* send packets */ >> - vu_flush(vdev, vq, elem, iov_cnt); >> + vu_queue_notify(vdev, vq); > > If I understand correctly, this makes iov_cnt set by tcp_vu_sock_recv() > redundant because you're now calling vu_flush() from inside the loop > that iterates up to head_cnt (which is the only count we need to know). > > Maybe it would be clearer to have a patch in this series dropping > iov_cnt as argument altogether (especially the commit message of that > kind of change might make things clearer). I rework this part in the TCP series. This is one of the reasons the multibuffer series are needed. Here we have a simplification as we have one iovec per element, so the number of iovec is equal to the number of element, and head point to an element that is also one iovec. iov_cnt is the total number of iovec for a frame (spread across several elements) but as we have one iovec per element it's also the number of element. buf_cnt is the number of elements for a frame but also the number of iovec for a frame (as we have one iovec / element). So: - vu_flush() and vu_set_vnethdr() need the number of element / frame (buf_cnt as element count) - pcap_iov() needs the number of iovec in a frame (buf_cnt as iovec count) In this patch I only want to move vu_set_vnethdr(), no more. Thanks, Laurent