[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [PATCH v2 1/2] virtio-net: Fix receive buffer size calculation text
On Mon, Jan 15 2024, Parav Pandit <parav@nvidia.com> wrote: > Receive buffer size calculation is based on the following > negotiated features. > > The text has wrong calculation for IPv6 and also it has missed > VIRTIO_NET_F_HASH_REPORT. > > The problem of igorance of VIRTIO_NET_F_HASH_REPORT is reported > in [1], however fix for ipv6 payload length must also be > considered. > > Since for the both the fixes touching same requirements, a > new issue is created as [2]. > > This patch brings following fixes. > > 1. Fix annotating struct virtio_net_hdr as field > 2. Fix receive buffer calculation for guest GSO cases to consider > ipv6 payload length > 3. small grammar corrections for article > 4. reword the requirement to consider the virtio_ndr_hdr which is > depends on the negotiated feature, hence first clarify the > struct virtio_net_hdr size > > [1] https://github.com/oasis-tcs/virtio-spec/issues/170 > [2] https://github.com/oasis-tcs/virtio-spec/issues/183 > > Fixes: https://github.com/oasis-tcs/virtio-spec/issues/170 > Fixes: https://github.com/oasis-tcs/virtio-spec/issues/183 > Signed-off-by: Parav Pandit <parav@nvidia.com> > > --- > changelog: > v1->v2: > - addressed comments from Cornelia > - rephrase buffer size wording without explicit length of virtio_net_hdr > at 3 places. > - replaced otherwise to ', otherwise' > - rephrase non normative to write as driver normative > --- > device-types/net/description.tex | 23 ++++++++++++++++------- > 1 file changed, 16 insertions(+), 7 deletions(-) > > diff --git a/device-types/net/description.tex b/device-types/net/description.tex > index aff5e08..53a56ee 100644 > --- a/device-types/net/description.tex > +++ b/device-types/net/description.tex > @@ -657,10 +657,13 @@ \subsubsection{Setting Up Receive Buffers}\label{sec:Device Types / Network Devi > If the VIRTIO_NET_F_GUEST_TSO4, VIRTIO_NET_F_GUEST_TSO6, > VIRTIO_NET_F_GUEST_UFO, VIRTIO_NET_F_GUEST_USO4 or VIRTIO_NET_F_GUEST_USO6 > features are used, the maximum incoming packet > -will be to 65550 bytes long (the maximum size of a > -TCP or UDP packet, plus the 14 byte ethernet header), otherwise > -1514 bytes. The 12-byte struct virtio_net_hdr is prepended to this, > -making for 65562 or 1526 bytes. > +will be 65589 bytes long (14 bytes of Ethernet header, plus 40 bytes of > +the IPv6 header, plus 65535 bytes of maximum IPv6 payload including any > +extension header), otherwise 1514 bytes. Hm, I wonder if we should still mention that "\field{struct virtio_net_header} will be prepended to this, which is either 20 or 12 bytes long, depending on whether VIRTIO_NET_F_HASH_REPORT is negotiated or not." > +When VIRTIO_NET_F_HASH_REPORT is not negotiated, the required receive buffer > +size is either 65601 or 1526 bytes. > +When VIRTIO_NET_F_HASH_REPORT is negotiated, the required receive buffer > +size is either 65609 or 1534 bytes. > > \drivernormative{\paragraph}{Setting Up Receive Buffers}{Device Types / Network Device / Device Operation / Setting Up Receive Buffers} > > @@ -669,18 +672,24 @@ \subsubsection{Setting Up Receive Buffers}\label{sec:Device Types / Network Devi > \begin{itemize} > \item If VIRTIO_NET_F_GUEST_TSO4, VIRTIO_NET_F_GUEST_TSO6, VIRTIO_NET_F_GUEST_UFO, > VIRTIO_NET_F_GUEST_USO4 or VIRTIO_NET_F_GUEST_USO6 are negotiated, the driver SHOULD populate > - the receive queue(s) with buffers of at least 65562 bytes. > + the receive queue(s) with buffers of at least 65609 bytes if > + VIRTIO_NET_F_HASH_REPORT is negotiated, and of at least 65601 bytes if not. > \item Otherwise, the driver SHOULD populate the receive queue(s) > - with buffers of at least 1526 bytes. > + with buffers of at least 1534 bytes if VIRTIO_NET_F_HASH_REPORT > + is negotiated, and of at least 1526 bytes if not. > \end{itemize} > \item If VIRTIO_NET_F_MRG_RXBUF is negotiated, each buffer MUST be at > -least the size of the struct virtio_net_hdr. > +least size of \field{struct virtio_net_hdr}, > +i.e. 20 bytes if VIRTIO_NET_F_HASH_REPORT is negotiated, and 12 bytes if not. > \end{itemize} > > \begin{note} > Obviously each buffer can be split across multiple descriptor elements. > \end{note} > > +The driver MUST consider size of field \field{struct virtio_net_hdr} > +20 bytes if VIRTIO_NET_F_HASH_REPORT is negotiated, and 12 bytes if not. > + Requiring the driver to consider the size of something to be its actual size seems a bit odd :) I don't think we need this, as the length can be derived from looking at the definitions, and is already spelled out explicitly, if you consider my suggestion above.
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]