[virtio-dev] Re: [PATCH v5] virtio-net: support reset queue

2022-05-26 Thread Xuan Zhuo
On Fri, 29 Apr 2022 10:45:28 +0800, Jason Wang  wrote:
>
> 在 2022/4/24 16:31, Xuan Zhuo 写道:
> > A separate reset queue function introduced by Virtqueue Reset.
> >
> > However, it is currently not defined what to do if the destination queue is
> > being reset when virtio-net is steering in multi-queue mode.
> >
> > Fixes: https://github.com/oasis-tcs/virtio-spec/issues/138
> > Signed-off-by: Xuan Zhuo 
>
>
> Reviewed-by: Jason Wang 

Fixes: https://github.com/oasis-tcs/virtio-spec/issues/138

If there are no other questions, I think we can vote for this.

Thanks.

>
>
> > ---
> >   content.tex | 5 +
> >   1 file changed, 5 insertions(+)
> >
> > diff --git a/content.tex b/content.tex
> > index 060bdab..61c36e8 100644
> > --- a/content.tex
> > +++ b/content.tex
> > @@ -4337,6 +4337,10 @@ \subsubsection{Control Virtqueue}\label{sec:Device 
> > Types / Network Device / Devi
> >   \field{virtqueue_pairs} once it has placed the
> >   VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET command in a used buffer.
> >
> > +If the destination receive queue is being reset (See \ref{sec:Basic 
> > Facilities of a Virtio Device / Virtqueues / Virtqueue Reset}),
> > +the device SHOULD re-select another random queue. If all receive queues are
> > +being reset, the device MUST drop the packet.
> > +
> >   \subparagraph{Legacy Interface: Automatic receive steering in multiqueue 
> > mode}\label{sec:Device Types / Network Device / Device Operation / Control 
> > Virtqueue / Automatic receive steering in multiqueue mode / Legacy 
> > Interface: Automatic receive steering in multiqueue mode}
> >   When using the legacy interface, transitional devices and drivers
> >   MUST format \field{virtqueue_pairs}
> > @@ -4425,6 +4429,7 @@ \subsubsection{Control Virtqueue}\label{sec:Device 
> > Types / Network Device / Devi
> >   \item Calculate the hash of the packet as defined in \ref{sec:Device 
> > Types / Network Device / Device Operation / Processing of Incoming Packets 
> > / Hash calculation for incoming packets}.
> >   \item If the device did not calculate the hash for the specific packet, 
> > the device directs the packet to the receiveq specified by 
> > \field{unclassified_queue} of virtio_net_rss_config structure (value of 0 
> > corresponds to receiveq1).
> >   \item Apply \field{indirection_table_mask} to the calculated hash and use 
> > the result as the index in the indirection table to get 0-based number of 
> > destination receiveq (value of 0 corresponds to receiveq1).
> > +\item If the destination receive queue is being reset (See \ref{sec:Basic 
> > Facilities of a Virtio Device / Virtqueues / Virtqueue Reset}), the device 
> > MUST drop the packet.
> >   \end{itemize}
> >
> >   \paragraph{Offloads State Configuration}\label{sec:Device Types / Network 
> > Device / Device Operation / Control Virtqueue / Offloads State 
> > Configuration}
>

-
To unsubscribe, e-mail: virtio-dev-unsubscr...@lists.oasis-open.org
For additional commands, e-mail: virtio-dev-h...@lists.oasis-open.org



Re: [virtio-dev] Re: [PATCH v2] virtio_net: support split header

2022-05-26 Thread Xuan Zhuo
On Mon, 9 May 2022 16:41:11 +0800, Jason Wang  wrote:
>
> 在 2022/5/7 15:15, Xuan Zhuo 写道:
> > The purpose of this feature is to split the header and the payload of
> > the packet.
> >
> > |receive buffer|
> > |   0th descriptor | 1th descriptor|
> > | virtnet hdr | mac | ip hdr | tcp hdr|<-- hold -->|   payload |
> >
> > We can use a buffer plus a separate page when allocating the receive
> > buffer. In this way, we can ensure that all payloads can be
> > independently in a page, which is very beneficial for the zerocopy
> > implemented by the upper layer.
> >
> > Signed-off-by: Xuan Zhuo 
> > ---
> >   conformance.tex |  2 ++
> >   content.tex | 72 +
> >   2 files changed, 74 insertions(+)
> >
> > diff --git a/conformance.tex b/conformance.tex
> > index 663e7c3..6f561fb 100644
> > --- a/conformance.tex
> > +++ b/conformance.tex
> > @@ -149,6 +149,7 @@ \section{Conformance Targets}\label{sec:Conformance / 
> > Conformance Targets}
> >   \item \ref{drivernormative:Device Types / Network Device / Device 
> > Operation / Control Virtqueue / Automatic receive steering in multiqueue 
> > mode}
> >   \item \ref{drivernormative:Device Types / Network Device / Device 
> > Operation / Control Virtqueue / Offloads State Configuration / Setting 
> > Offloads State}
> >   \item \ref{drivernormative:Device Types / Network Device / Device 
> > Operation / Control Virtqueue / Receive-side scaling (RSS) }
> > +\item \ref{drivernormative:Device Types / Network Device / Device 
> > Operation / Control Virtqueue / Split Header}
> >   \end{itemize}
> >
> >   \conformance{\subsection}{Block Driver Conformance}\label{sec:Conformance 
> > / Driver Conformance / Block Driver Conformance}
> > @@ -411,6 +412,7 @@ \section{Conformance Targets}\label{sec:Conformance / 
> > Conformance Targets}
> >   \item \ref{devicenormative:Device Types / Network Device / Device 
> > Operation / Control Virtqueue / Gratuitous Packet Sending}
> >   \item \ref{devicenormative:Device Types / Network Device / Device 
> > Operation / Control Virtqueue / Automatic receive steering in multiqueue 
> > mode}
> >   \item \ref{devicenormative:Device Types / Network Device / Device 
> > Operation / Control Virtqueue / Receive-side scaling (RSS) / RSS processing}
> > +\item \ref{devicenormative:Device Types / Network Device / Device 
> > Operation / Control Virtqueue / Split Header}
> >   \end{itemize}
> >
> >   \conformance{\subsection}{Block Device Conformance}\label{sec:Conformance 
> > / Device Conformance / Block Device Conformance}
> > diff --git a/content.tex b/content.tex
> > index 060bdab..3340402 100644
> > --- a/content.tex
> > +++ b/content.tex
> > @@ -3092,6 +3092,9 @@ \subsection{Feature bits}\label{sec:Device Types / 
> > Network Device / Feature bits
> >   \item[VIRTIO_NET_F_CTRL_MAC_ADDR(23)] Set MAC address through control
> >   channel.
> >
> > +\item[VIRTIO_NET_F_SPLIT_HEADER (55)] Device supports to split the header 
> > and
> > +the payload.
> > +
> >   \item[VIRTIO_NET_F_HOST_USO (56)] Device can receive USO packets. Unlike 
> > UFO
> >(fragmenting the packet) the USO splits large UDP packet
> >to several segments when each of these smaller packets has UDP header.
> > @@ -3139,6 +3142,7 @@ \subsubsection{Feature bit 
> > requirements}\label{sec:Device Types / Network Device
> >   \item[VIRTIO_NET_F_CTRL_MAC_ADDR] Requires VIRTIO_NET_F_CTRL_VQ.
> >   \item[VIRTIO_NET_F_RSC_EXT] Requires VIRTIO_NET_F_HOST_TSO4 or 
> > VIRTIO_NET_F_HOST_TSO6.
> >   \item[VIRTIO_NET_F_RSS] Requires VIRTIO_NET_F_CTRL_VQ.
> > +\item[VIRTIO_NET_F_SPLIT_HEADER] Requires VIRTIO_NET_F_CTRL_VQ.
> >   \end{description}
> >
> >   \subsubsection{Legacy Interface: Feature bits}\label{sec:Device Types / 
> > Network Device / Feature bits / Legacy Interface: Feature bits}
> > @@ -3370,6 +3374,7 @@ \subsection{Device Operation}\label{sec:Device Types 
> > / Network Device / Device O
> >   #define VIRTIO_NET_HDR_F_NEEDS_CSUM1
> >   #define VIRTIO_NET_HDR_F_DATA_VALID2
> >   #define VIRTIO_NET_HDR_F_RSC_INFO  4
> > +#define VIRTIO_NET_HDR_F_SPLIT_HEADER  8
> >   u8 flags;
> >   #define VIRTIO_NET_HDR_GSO_NONE0
> >   #define VIRTIO_NET_HDR_GSO_TCPV4   1
> > @@ -4471,6 +4476,73 @@ \subsubsection{Control Virtqueue}\label{sec:Device 
> > Types / Network Device / Devi
> >   according to the native endian of the guest rather than
> >   (necessarily when not using the legacy interface) little-endian.
> >
> > +\paragraph{Split Header}\label{sec:Device Types / Network Device / Device 
> > Operation / Control Virtqueue / Split Header}
> > +
> > +If the VIRTIO_NET_F_SPLIT_HEADER feature is negotiated,
> > +the device supports to split the header and the payload.
> > +The header and payload will be separated into different buffers.
>
>
> I think you meant "descriptors" instead of