summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--content.tex43
1 files changed, 21 insertions, 22 deletions
diff --git a/content.tex b/content.tex
index 206501d..c9dd28d 100644
--- a/content.tex
+++ b/content.tex
@@ -2818,16 +2818,16 @@ features.
\subsection{Virtqueues}\label{sec:Device Types / Network Device / Virtqueues}
\begin{description}
-\item[0] receiveq0
-\item[1] transmitq0
+\item[0] receiveq1
+\item[1] transmitq1
\item[\ldots]
\item[2N] receiveqN
\item[2N+1] transmitqN
\item[2N+2] controlq
\end{description}
- N=0 if VIRTIO_NET_F_MQ is not negotiated, otherwise N is derived
- from \field{max_virtqueue_pairs} control field.
+ N=1 if VIRTIO_NET_F_MQ is not negotiated, otherwise N is set by
+ \field{max_virtqueue_pairs}.
controlq only exists if VIRTIO_NET_F_CTRL_VQ set.
@@ -2928,9 +2928,8 @@ VIRTIO_NET_S_LINK_UP and VIRTIO_NET_S_ANNOUNCE.
The following driver-read-only field, \field{max_virtqueue_pairs} only exists if
VIRTIO_NET_F_MQ is set. This field specifies the maximum number
-of each of transmit and receive virtqueues (receiveq0\ldots receiveqN
-and transmitq0\ldots transmitqN respectively;
- N=\field{max_virtqueue_pairs} - 1) that can be configured once VIRTIO_NET_F_MQ
+of each of transmit and receive virtqueues (receiveq1\ldots receiveqN
+and transmitq1\ldots transmitqN respectively) that can be configured once VIRTIO_NET_F_MQ
is negotiated.
\begin{lstlisting}
@@ -2972,16 +2971,16 @@ A driver would perform a typical initialization routine like so:
\begin{enumerate}
\item Identify and initialize the receive and
- transmission virtqueues, up to N+1 of each kind. If
+ transmission virtqueues, up to N of each kind. If
VIRTIO_NET_F_MQ feature bit is negotiated,
- N=\field{max_virtqueue_pairs}-1, otherwise identify N=0.
+ N=\field{max_virtqueue_pairs}, otherwise identify N=1.
\item If the VIRTIO_NET_F_CTRL_VQ feature bit is negotiated,
identify the control virtqueue.
\item Fill the receive queues with buffers: see \ref{sec:Device Types / Network Device / Device Operation / Setting Up Receive Buffers}.
-\item Even with VIRTIO_NET_F_MQ, only receiveq0, transmitq0 and
+\item Even with VIRTIO_NET_F_MQ, only receiveq1, transmitq1 and
controlq are used by default. The driver would send the
VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET command specifying the
number of the transmit and receive queues to use.
@@ -3021,8 +3020,8 @@ everything else.
\subsection{Device Operation}\label{sec:Device Types / Network Device / Device Operation}
Packets are transmitted by placing them in the
-transmitq0\ldots transmitqN, and buffers for incoming packets are
-placed in the receiveq0\ldots receiveqN. In each case, the packet
+transmitq1\ldots transmitqN, and buffers for incoming packets are
+placed in the receiveq1\ldots receiveqN. In each case, the packet
itself is preceeded by a header:
\begin{lstlisting}
@@ -3176,14 +3175,14 @@ making for 65562 or 1526 bytes.
with buffers of at least 1526 bytes.
\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.
+ greater than the size of the struct virtio_net_hdr.
\end{itemize}
\begin{note}
Obviously each buffer can be split across multiple descriptor elements.
\end{note}
-If VIRTIO_NET_F_MQ is negotiated, each of receiveq0\ldots receiveqN
+If VIRTIO_NET_F_MQ is negotiated, each of receiveq1\ldots receiveqN
that will be used SHOULD be populated with receive buffers.
\paragraph{Packet Receive Interrupt}\label{sec:Device Types / Network Device / Device Operation / Setting Up Receive Buffers / Packet Receive Interrupt}
@@ -3422,8 +3421,8 @@ before marking the buffer as used.
If the driver negotiates the VIRTIO_NET_F_MQ feature bit (depends
on VIRTIO_NET_F_CTRL_VQ), it MAY transmit outgoing packets on one
-of the multiple transmitq0\ldots transmitqN and ask the device to
-queue incoming packets into one of the multiple receiveq0\ldots receiveqN
+of the multiple transmitq1\ldots transmitqN and ask the device to
+queue incoming packets into one of the multiple receiveq1\ldots receiveqN
depending on the packet flow.
\begin{lstlisting}
@@ -3441,16 +3440,16 @@ Multiqueue is disabled by default. The driver enables multiqueue by
executing the VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET command, specifying
the number of the transmit and receive queues to be used up to
\field{max_virtqueue_pairs}; subsequently,
-transmitq0\ldots transmitqn and receiveq0\ldots receiveqn where
-n=virtqueue_pairs-1 MAY be used.
+transmitq1\ldots transmitqn and receiveq1\ldots receiveqn where
+n=\field{virtqueue_pairs} MAY be used.
When multiqueue is enabled, the device MUST use automatic receive steering
based on packet flow. Programming of the receive steering
classificator is implicit. After the driver transmitted a packet of a
-flow on transmitqX, the device MUST cause incoming packets for that flow to
+flow on transmitqX, the device SHOULD cause incoming packets for that flow to
be steered to receiveqX. For uni-directional protocols, or where
no packets have been transmitted yet, the device MAY steer a packet
-to a random queue out of the specified receiveq0\ldots receiveqn.
+to a random queue out of the specified receiveq1\ldots receiveqn.
Multiqueue is disabled by setting \field{virtqueue_pairs} to 1 (this is
the default) and waiting for the device to use the command buffer.
@@ -3463,7 +3462,7 @@ VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET command.
The driver MUST NOT request a \field{virtqueue_pairs} of 0 or
greater than \field{max_virtqueue_pairs} in the device configuration space.
-The driver MUST queue packets only on any transmitq0 before the
+The driver MUST queue packets only on any transmitq1 before the
VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET command.
The driver MUST NOT queue packets on transmit queues greater than
@@ -3471,7 +3470,7 @@ The driver MUST NOT queue packets on transmit queues greater than
\devicenormative{\subparagraph}{Automatic receive steering in multiqueue mode}{Device Types / Network Device / Device Operation / Control Virtqueue / Automatic receive steering in multiqueue mode}
-The device MUST queue packets only on any receiveq0 before the
+The device MUST queue packets only on any receiveq1 before the
VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET command.
The device MUST NOT queue packets on receive queues greater than