From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: passt.top; dkim=pass (2048-bit key; secure) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.a=rsa-sha256 header.s=202602 header.b=T5KrrYH8; dkim-atps=neutral Received: from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) by passt.top (Postfix) with ESMTPS id 80EB75A0274 for ; Mon, 02 Mar 2026 01:54:42 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202602; t=1772412878; bh=S0pVsF/tZMwkVzybRvVhLlneCJUCEOLO+Etby66w78E=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=T5KrrYH831/XCsXO5x5A8QZ6GXNZ/nPlJ9G1rV+pdLwis4VPYtQWkfodIh58syAHI FhrbNCdu2P6IXf7GlQe+v9tBfQGNpe3gEykl0tbWYVhwbmvvVNM9nbjAXC63priajN MN/82Y3BILWMsj/Bo0Afzq30JRksO6Iu20CqvUo59pnlt97iYFdF7FMSsxNLPpGD/u Ku4lO0fJ8Ey8A3r+8YX601SLuzEDtq27lbpxD9u+kwc38axifgV3dOTnzZgSPpOnGz SpaMrICjJUSx7KjTcI5ab9JOBuscn+OGPBIWBKj75aDyjOi52/HxH153xVvTJB/ZaI ENBLDcM+iHdOg== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4fPL726Ql0z4wCP; Mon, 02 Mar 2026 11:54:38 +1100 (AEDT) Date: Mon, 2 Mar 2026 11:54:31 +1100 From: David Gibson To: Laurent Vivier Subject: Re: [PATCH 09/12] vu_common: Accept explicit iovec counts in vu_set_element() Message-ID: References: <20260227140330.2216753-1-lvivier@redhat.com> <20260227140330.2216753-10-lvivier@redhat.com> MIME-Version: 1.0 In-Reply-To: <20260227140330.2216753-10-lvivier@redhat.com> X-MailFrom: dgibson@gandalf.ozlabs.org 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 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="oGWaY763OmweAkiN" Content-Disposition: inline Message-ID-Hash: AQSTGNV3SFOJ4IYHQEV37GOR4E7HXUIW X-Message-ID-Hash: AQSTGNV3SFOJ4IYHQEV37GOR4E7HXUIW 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: --oGWaY763OmweAkiN Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, Feb 27, 2026 at 03:03:27PM +0100, Laurent Vivier wrote: > Previously, vu_set_element() derived the number of iovec entries from > whether the pointer was NULL or not (using !!out_sg and !!in_sg). This > implicitly limited each virtqueue element to at most one iovec per > direction. >=20 > Change the function signature to accept explicit out_num and in_num > parameters, allowing callers to specify multiple iovec entries per > element when needed. Update all existing call sites to pass the > equivalent values (0 for NULL pointers, 1 for valid pointers). >=20 > No functional change. >=20 > Signed-off-by: Laurent Vivier Reviewed-by: David Gibson > --- > tcp_vu.c | 4 ++-- > vu_common.c | 5 +++-- > vu_common.h | 13 ++++++++----- > 3 files changed, 13 insertions(+), 9 deletions(-) >=20 > diff --git a/tcp_vu.c b/tcp_vu.c > index 92667507ac9b..77d6e75496a0 100644 > --- a/tcp_vu.c > +++ b/tcp_vu.c > @@ -87,7 +87,7 @@ int tcp_vu_send_flag(const struct ctx *c, struct tcp_ta= p_conn *conn, int flags) > =20 > =09hdrlen =3D tcp_vu_hdrlen(CONN_V6(conn)); > =20 > -=09vu_set_element(&flags_elem[0], NULL, &flags_iov[0]); > +=09vu_set_element(&flags_elem[0], 0, NULL, 1, &flags_iov[0]); > =20 > =09elem_cnt =3D vu_collect(vdev, vq, &flags_elem[0], 1, > =09=09=09 MAX(hdrlen + sizeof(*opts), ETH_ZLEN + VNET_HLEN), NULL); > @@ -149,7 +149,7 @@ int tcp_vu_send_flag(const struct ctx *c, struct tcp_= tap_conn *conn, int flags) > =09nb_ack =3D 1; > =20 > =09if (flags & DUP_ACK) { > -=09=09vu_set_element(&flags_elem[1], NULL, &flags_iov[1]); > +=09=09vu_set_element(&flags_elem[1], 0, NULL, 1, &flags_iov[1]); > =20 > =09=09elem_cnt =3D vu_collect(vdev, vq, &flags_elem[1], 1, > =09=09=09=09 flags_elem[0].in_sg[0].iov_len, NULL); > diff --git a/vu_common.c b/vu_common.c > index a8d5fcdaea83..b6753a556049 100644 > --- a/vu_common.c > +++ b/vu_common.c > @@ -59,12 +59,13 @@ int vu_packet_check_range(struct vdev_memory *memory, > * @iov:=09Array of iovec to assign to virtqueue element > * @elem_cnt:=09Number of virtqueue element > */ > -void vu_init_elem(struct vu_virtq_element *elem, struct iovec *iov, int = elem_cnt) > +void vu_init_elem(struct vu_virtq_element *elem, struct iovec *iov, > +=09=09 int elem_cnt) > { > =09int i; > =20 > =09for (i =3D 0; i < elem_cnt; i++) > -=09=09vu_set_element(&elem[i], NULL, &iov[i]); > +=09=09vu_set_element(&elem[i], 0, NULL, 1, &iov[i]); > } > =20 > /** > diff --git a/vu_common.h b/vu_common.h > index 41cf18936300..c1d2ce888f12 100644 > --- a/vu_common.h > +++ b/vu_common.h > @@ -32,15 +32,18 @@ static inline void *vu_payloadv6(void *base) > /** > * vu_set_element() - Initialize a vu_virtq_element > * @elem:=09Element to initialize > - * @out_sg:=09One out iovec entry to set in elem > - * @in_sg:=09One in iovec entry to set in elem > + * @out_num:=09Number of outgoing iovec buffers > + * @out_sg:=09Out iovec entry to set in elem > + * @in_num:=09Number of incoming iovec buffers > + * @in_sg:=09In iovec entry to set in elem > */ > static inline void vu_set_element(struct vu_virtq_element *elem, > -=09=09=09=09 struct iovec *out_sg, struct iovec *in_sg) > +=09=09=09=09 unsigned int out_num, struct iovec *out_sg, > +=09=09=09=09 unsigned int in_num, struct iovec *in_sg) > { > -=09elem->out_num =3D !!out_sg; > +=09elem->out_num =3D out_num; > =09elem->out_sg =3D out_sg; > -=09elem->in_num =3D !!in_sg; > +=09elem->in_num =3D in_num; > =09elem->in_sg =3D in_sg; > } > =20 > --=20 > 2.53.0 >=20 --=20 David Gibson (he or they)=09| I'll have my music baroque, and my code david AT gibson.dropbear.id.au=09| minimalist, thank you, not the other way =09=09=09=09| around. http://www.ozlabs.org/~dgibson --oGWaY763OmweAkiN Content-Type: application/pgp-signature; name=signature.asc -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEO+dNsU4E3yXUXRK2zQJF27ox2GcFAmmk38YACgkQzQJF27ox 2Gf4hBAAgdmg7+DgE9xxqq4eBYkZkOPwa0/9CRURjLgBdYimN1ax/oxQMRg5sn9S 2kcW30l0eMpsXsXCupAQAuHLkgwBktyc7ZrfqiInOIR3aievqvBX6RPsKHzVA4Hk 6PJVGJD2R7olCxYfBLuGYyGFDN6Aj0ELQzxX/6UX32Aj42cakgmpOnh+Uhq/Fqf3 S4cUFKpUaC8JnjbKCsrTeJ9HJmR04S+0RTkespKs4kgDIqf8viR+P7CSg9F4AMP/ WUB6KhXjr6tMmzL5bgR4T2HJcDkkaCv158zrLUe82XZlgT7PQqd8dyYPKpFZRO9B 17LsbhlLI02T1VNmldsglfnp0aabWthv65NxOdEKkI7uGpTUYIo3sZkYHM6UaikB X6tvS2j48Zjm3Tug/q/CN6EFCGirNLZ9nT8RXHnb2CasEvGrxDf0cb4HX+keaxpb GPSy6JcJ2y1dAuP/S6g4JQnX3Ri/LFs8DLw7Ou/Uf2bIvTlP6tLsguN0EIwe1m1A oo2jdf3UZOnKW5YRGHQUELC6H3Mq1zhVUdoEDAnq2bNyIUHfktfAGM/OPp7qrXsn UaPAOC+0W/XbvVHi1UDBP72mmXentgogM+mobG2iHagh+PA9/Sae35Vcpx6wSHe/ BW56ECcmCX8QPVyzngTg11mBdpQxP9BGlGnZz/IsDOnNJJW8iXo= =lIlq -----END PGP SIGNATURE----- --oGWaY763OmweAkiN--