virtio-comment

 View Only
Expand all | Collapse all

[PATCH v2 0/7] Rename queue index to queue number

  • 1.  [PATCH v2 0/7] Rename queue index to queue number

    Posted 03-21-2023 04:10
    1. Currently, virtqueue is identified between driver and device
    interchangeably using either number of index terminology.

    2. Between PCI and MMIO transport the queue size (depth) is
    defined as queue_size and QueueNum respectively.

    To avoid confusion and to have consistency, unify them to use as Number.

    Solution:
    a. Use virtqueue number description, and rename MMIO register as QueueSize.
    b. Replace virtqueue index to virtqueue number
    c. RSS area of virtio net has inherited some logic, describe it
    using abstract rq_handle.

    Patch summary:
    patch-1 renames index to number for pci transport
    patch-2 renames mmio register from Num to Size
    patch-3 renames index to number for mmio transport
    patch-4 renames num field to size for ccw transport
    patch-5 renames index field to queue_select for ccw transport
    patch-6 for virtio-net removes duplicate example from requirements
    patch-7 for virtio-net updates rss description to use vq number

    This series only improves the documentation, it does not change any
    transport or device functionality.

    Please review.
    This series fixes the issue [1].

    [1] https://github.com/oasis-tcs/virtio-spec/issues/163

    ---
    changelog:
    v1->v2:
    - added patches for virtio net for rss area
    - added patches for covering ccw transport
    - added missing entries to refer in mmio transport

    Parav Pandit (7):
    transport-pci: Refer to the vq by its number
    transport-mmio: Rename QueueNum register
    transport-mmio: Refer to the vq by its number
    transport-ccw: Rename queue depth/size to other transports
    transport-ccw: Refer to the vq by its number
    virtio-net: Avoid duplicate receive queue example
    virtio-net: Describe RSS using receive queue handle

    device-types/net/description.tex | 26 +++++++++++----
    transport-ccw.tex | 39 +++++++++++++++-------
    transport-mmio.tex | 56 +++++++++++++++++++-------------
    transport-pci.tex | 6 ++--
    4 files changed, 84 insertions(+), 43 deletions(-)

    --
    2.26.2




  • 2.  [PATCH v2 1/7] transport-pci: Refer to the vq by its number

    Posted 03-21-2023 04:11
    Currently specification uses virtqueue index and
    number interchangeably to refer to the virtqueue.

    Instead refer to it by its number.

    This patch is on top of [1].

    [1] https://lists.oasis-open.org/archives/virtio-dev/202302/msg00527.html

    Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Signed-off-by: Parav Pandit <parav@nvidia.com>
    ---
    transport-pci.tex | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    diff --git a/transport-pci.tex b/transport-pci.tex
    index b07a822..dbd3adb 100644
    --- a/transport-pci.tex
    +++ b/transport-pci.tex
    @@ -1005,7 +1005,7 @@ \subsubsection{Device Initialization}\label{sec:Virtio Transport Options / Virti
    The driver typically does this as follows, for each virtqueue a device has:

    \begin{enumerate}
    -\item Write the virtqueue index (first queue is 0) to \field{queue_select}.
    +\item Write the virtqueue number (first queue is 0) to \field{queue_select}.

    \item Read the virtqueue size from \field{queue_size}. This controls how big the virtqueue is
    (see \ref{sec:Basic Facilities of a Virtio Device / Virtqueues}~\nameref{sec:Basic Facilities of a Virtio Device / Virtqueues}). If this field is 0, the virtqueue does not exist.
    @@ -1035,7 +1035,7 @@ \subsubsection{Available Buffer Notifications}\label{sec:Virtio Transport Option

    When VIRTIO_F_NOTIFICATION_DATA has not been negotiated,
    the driver sends an available buffer notification to the device by writing
    -the 16-bit virtqueue index
    +the 16-bit virtqueue number
    of this virtqueue to the Queue Notify address.

    When VIRTIO_F_NOTIFICATION_DATA has been negotiated,
    @@ -1053,7 +1053,7 @@ \subsubsection{Available Buffer Notifications}\label{sec:Virtio Transport Option
    If VIRTIO_F_NOTIF_CONFIG_DATA has been negotiated:
    \begin{itemize}
    \item If VIRTIO_F_NOTIFICATION_DATA has not been negotiated, the driver MUST use the
    -\field{queue_notify_data} value instead of the virtqueue index.
    +\field{queue_notify_data} value instead of the virtqueue number.
    \item If VIRTIO_F_NOTIFICATION_DATA has been negotiated, the driver MUST set the
    \field{vqn} field to the \field{queue_notify_data} value.
    \end{itemize}
    --
    2.26.2




  • 3.  [PATCH v2 1/7] transport-pci: Refer to the vq by its number

    Posted 03-21-2023 04:11
    Currently specification uses virtqueue index and
    number interchangeably to refer to the virtqueue.

    Instead refer to it by its number.

    This patch is on top of [1].

    [1] https://lists.oasis-open.org/archives/virtio-dev/202302/msg00527.html

    Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Signed-off-by: Parav Pandit <parav@nvidia.com>
    ---
    transport-pci.tex | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    diff --git a/transport-pci.tex b/transport-pci.tex
    index b07a822..dbd3adb 100644
    --- a/transport-pci.tex
    +++ b/transport-pci.tex
    @@ -1005,7 +1005,7 @@ \subsubsection{Device Initialization}\label{sec:Virtio Transport Options / Virti
    The driver typically does this as follows, for each virtqueue a device has:

    \begin{enumerate}
    -\item Write the virtqueue index (first queue is 0) to \field{queue_select}.
    +\item Write the virtqueue number (first queue is 0) to \field{queue_select}.

    \item Read the virtqueue size from \field{queue_size}. This controls how big the virtqueue is
    (see \ref{sec:Basic Facilities of a Virtio Device / Virtqueues}~\nameref{sec:Basic Facilities of a Virtio Device / Virtqueues}). If this field is 0, the virtqueue does not exist.
    @@ -1035,7 +1035,7 @@ \subsubsection{Available Buffer Notifications}\label{sec:Virtio Transport Option

    When VIRTIO_F_NOTIFICATION_DATA has not been negotiated,
    the driver sends an available buffer notification to the device by writing
    -the 16-bit virtqueue index
    +the 16-bit virtqueue number
    of this virtqueue to the Queue Notify address.

    When VIRTIO_F_NOTIFICATION_DATA has been negotiated,
    @@ -1053,7 +1053,7 @@ \subsubsection{Available Buffer Notifications}\label{sec:Virtio Transport Option
    If VIRTIO_F_NOTIF_CONFIG_DATA has been negotiated:
    \begin{itemize}
    \item If VIRTIO_F_NOTIFICATION_DATA has not been negotiated, the driver MUST use the
    -\field{queue_notify_data} value instead of the virtqueue index.
    +\field{queue_notify_data} value instead of the virtqueue number.
    \item If VIRTIO_F_NOTIFICATION_DATA has been negotiated, the driver MUST set the
    \field{vqn} field to the \field{queue_notify_data} value.
    \end{itemize}
    --
    2.26.2




  • 4.  Re: [virtio-comment] [PATCH v2 1/7] transport-pci: Refer to the vq by its number

    Posted 03-21-2023 09:01
    On Tue, Mar 21, 2023 at 06:10:30AM +0200, Parav Pandit wrote:
    > Currently specification uses virtqueue index and
    > number interchangeably to refer to the virtqueue.
    >
    > Instead refer to it by its number.
    >
    > This patch is on top of [1].
    >
    > [1] https://lists.oasis-open.org/archives/virtio-dev/202302/msg00527.html
    >
    > Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    > Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    > Signed-off-by: Parav Pandit <parav@nvidia.com>
    > ---
    > transport-pci.tex | 6 +++---
    > 1 file changed, 3 insertions(+), 3 deletions(-)
    >
    > diff --git a/transport-pci.tex b/transport-pci.tex
    > index b07a822..dbd3adb 100644
    > --- a/transport-pci.tex
    > +++ b/transport-pci.tex
    > @@ -1005,7 +1005,7 @@ \subsubsection{Device Initialization}\label{sec:Virtio Transport Options / Virti
    > The driver typically does this as follows, for each virtqueue a device has:
    >
    > \begin{enumerate}
    > -\item Write the virtqueue index (first queue is 0) to \field{queue_select}.
    > +\item Write the virtqueue number (first queue is 0) to \field{queue_select}.
    >
    > \item Read the virtqueue size from \field{queue_size}. This controls how big the virtqueue is
    > (see \ref{sec:Basic Facilities of a Virtio Device / Virtqueues}~\nameref{sec:Basic Facilities of a Virtio Device / Virtqueues}). If this field is 0, the virtqueue does not exist.
    > @@ -1035,7 +1035,7 @@ \subsubsection{Available Buffer Notifications}\label{sec:Virtio Transport Option
    >
    > When VIRTIO_F_NOTIFICATION_DATA has not been negotiated,
    > the driver sends an available buffer notification to the device by writing
    > -the 16-bit virtqueue index
    > +the 16-bit virtqueue number
    > of this virtqueue to the Queue Notify address.
    >
    > When VIRTIO_F_NOTIFICATION_DATA has been negotiated,
    > @@ -1053,7 +1053,7 @@ \subsubsection{Available Buffer Notifications}\label{sec:Virtio Transport Option
    > If VIRTIO_F_NOTIF_CONFIG_DATA has been negotiated:
    > \begin{itemize}
    > \item If VIRTIO_F_NOTIFICATION_DATA has not been negotiated, the driver MUST use the
    > -\field{queue_notify_data} value instead of the virtqueue index.
    > +\field{queue_notify_data} value instead of the virtqueue number.
    > \item If VIRTIO_F_NOTIFICATION_DATA has been negotiated, the driver MUST set the
    > \field{vqn} field to the \field{queue_notify_data} value.
    > \end{itemize}



    Hmm OK.

    Now here's another a problem:

    \item[\field{queue_notify_data}]
    This field exists only if VIRTIO_F_NOTIF_CONFIG_DATA has been negotiated.
    The driver will use this value to put it in the 'virtqueue number' field
    in the available buffer notification structure.

    and I think it's actually \field{vqn} not 'virtqueue number':
    \item [vqn] VQ number to be notified.

    and it also says

    In a trivial case the device can set \field{queue_notify_data}=vqn. Some devices
    may benefit from providing another value, for example an internal virtqueue
    identifier, or an internal offset related to the virtqueue number.

    and that's backwards since vqn is always queue_notify_data.
    What is meant is "set queue_notify_data to the virtqueue number'.




  • 5.  Re: [virtio-comment] [PATCH v2 1/7] transport-pci: Refer to the vq by its number

    Posted 03-21-2023 09:01
    On Tue, Mar 21, 2023 at 06:10:30AM +0200, Parav Pandit wrote:
    > Currently specification uses virtqueue index and
    > number interchangeably to refer to the virtqueue.
    >
    > Instead refer to it by its number.
    >
    > This patch is on top of [1].
    >
    > [1] https://lists.oasis-open.org/archives/virtio-dev/202302/msg00527.html
    >
    > Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    > Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    > Signed-off-by: Parav Pandit <parav@nvidia.com>
    > ---
    > transport-pci.tex | 6 +++---
    > 1 file changed, 3 insertions(+), 3 deletions(-)
    >
    > diff --git a/transport-pci.tex b/transport-pci.tex
    > index b07a822..dbd3adb 100644
    > --- a/transport-pci.tex
    > +++ b/transport-pci.tex
    > @@ -1005,7 +1005,7 @@ \subsubsection{Device Initialization}\label{sec:Virtio Transport Options / Virti
    > The driver typically does this as follows, for each virtqueue a device has:
    >
    > \begin{enumerate}
    > -\item Write the virtqueue index (first queue is 0) to \field{queue_select}.
    > +\item Write the virtqueue number (first queue is 0) to \field{queue_select}.
    >
    > \item Read the virtqueue size from \field{queue_size}. This controls how big the virtqueue is
    > (see \ref{sec:Basic Facilities of a Virtio Device / Virtqueues}~\nameref{sec:Basic Facilities of a Virtio Device / Virtqueues}). If this field is 0, the virtqueue does not exist.
    > @@ -1035,7 +1035,7 @@ \subsubsection{Available Buffer Notifications}\label{sec:Virtio Transport Option
    >
    > When VIRTIO_F_NOTIFICATION_DATA has not been negotiated,
    > the driver sends an available buffer notification to the device by writing
    > -the 16-bit virtqueue index
    > +the 16-bit virtqueue number
    > of this virtqueue to the Queue Notify address.
    >
    > When VIRTIO_F_NOTIFICATION_DATA has been negotiated,
    > @@ -1053,7 +1053,7 @@ \subsubsection{Available Buffer Notifications}\label{sec:Virtio Transport Option
    > If VIRTIO_F_NOTIF_CONFIG_DATA has been negotiated:
    > \begin{itemize}
    > \item If VIRTIO_F_NOTIFICATION_DATA has not been negotiated, the driver MUST use the
    > -\field{queue_notify_data} value instead of the virtqueue index.
    > +\field{queue_notify_data} value instead of the virtqueue number.
    > \item If VIRTIO_F_NOTIFICATION_DATA has been negotiated, the driver MUST set the
    > \field{vqn} field to the \field{queue_notify_data} value.
    > \end{itemize}



    Hmm OK.

    Now here's another a problem:

    \item[\field{queue_notify_data}]
    This field exists only if VIRTIO_F_NOTIF_CONFIG_DATA has been negotiated.
    The driver will use this value to put it in the 'virtqueue number' field
    in the available buffer notification structure.

    and I think it's actually \field{vqn} not 'virtqueue number':
    \item [vqn] VQ number to be notified.

    and it also says

    In a trivial case the device can set \field{queue_notify_data}=vqn. Some devices
    may benefit from providing another value, for example an internal virtqueue
    identifier, or an internal offset related to the virtqueue number.

    and that's backwards since vqn is always queue_notify_data.
    What is meant is "set queue_notify_data to the virtqueue number'.




  • 6.  RE: [virtio-comment] [PATCH v2 1/7] transport-pci: Refer to the vq by its number

    Posted 03-21-2023 20:43


    > From: Michael S. Tsirkin <mst@redhat.com>
    > Sent: Tuesday, March 21, 2023 5:01 AM
    >
    > \item[\field{queue_notify_data}]
    > This field exists only if VIRTIO_F_NOTIF_CONFIG_DATA has been
    > negotiated.
    > The driver will use this value to put it in the 'virtqueue number' field
    > in the available buffer notification structure.
    >
    > and I think it's actually \field{vqn} not 'virtqueue number':
    > \item [vqn] VQ number to be notified.
    >
    Yes. will fix this in v3.

    > and it also says
    >
    > In a trivial case the device can set \field{queue_notify_data}=vqn. Some
    > devices
    > may benefit from providing another value, for example an internal
    > virtqueue
    > identifier, or an internal offset related to the virtqueue number.
    >
    > and that's backwards since vqn is always queue_notify_data.
    > What is meant is "set queue_notify_data to the virtqueue number'.

    Yes this change too in v3.



  • 7.  RE: [virtio-comment] [PATCH v2 1/7] transport-pci: Refer to the vq by its number

    Posted 03-21-2023 20:43


    > From: Michael S. Tsirkin <mst@redhat.com>
    > Sent: Tuesday, March 21, 2023 5:01 AM
    >
    > \item[\field{queue_notify_data}]
    > This field exists only if VIRTIO_F_NOTIF_CONFIG_DATA has been
    > negotiated.
    > The driver will use this value to put it in the 'virtqueue number' field
    > in the available buffer notification structure.
    >
    > and I think it's actually \field{vqn} not 'virtqueue number':
    > \item [vqn] VQ number to be notified.
    >
    Yes. will fix this in v3.

    > and it also says
    >
    > In a trivial case the device can set \field{queue_notify_data}=vqn. Some
    > devices
    > may benefit from providing another value, for example an internal
    > virtqueue
    > identifier, or an internal offset related to the virtqueue number.
    >
    > and that's backwards since vqn is always queue_notify_data.
    > What is meant is "set queue_notify_data to the virtqueue number'.

    Yes this change too in v3.



  • 8.  [PATCH v2 2/7] transport-mmio: Rename QueueNum register

    Posted 03-21-2023 04:11
    Currently specification uses virtqueue index and number
    interchangeably to refer to the virtqueue.

    It is better to always refer to it the virtqueue in consistent manner.

    Two registers QueueNumMax and QueueNum actually reflects the queue size
    or queue depth indicating max and actual number of entries in the queue.

    These are further named differently between pci and mmio transport.
    PCI transport indicates queue size as queue_size.

    To bring consistency between pci and mmio transport, and to avoid
    confusion between number and index, rename the QueueNumMax and QueueNum
    registers to QueueSizeMax and QueueSize respectively.

    Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Signed-off-by: Parav Pandit <parav@nvidia.com>

    ---
    changelog:
    v0->v1:
    - replaced references of QueueNumMax to QueueSizeMax
    - replaced references of QueueNum to QueueSize
    - added note for renamed fields old name suggested by @Michael Tsirkin
    ---
    transport-mmio.tex | 42 ++++++++++++++++++++++++++++--------------
    1 file changed, 28 insertions(+), 14 deletions(-)

    diff --git a/transport-mmio.tex b/transport-mmio.tex
    index f884a2c..3047633 100644
    --- a/transport-mmio.tex
    +++ b/transport-mmio.tex
    @@ -110,24 +110,31 @@ \subsection{MMIO Device Register Layout}\label{sec:Virtio Transport Options / Vi
    \hline
    \mmioreg{QueueSel}{Virtual queue index}{0x030}{W}{%
    Writing to this register selects the virtual queue that the
    - following operations on \field{QueueNumMax}, \field{QueueNum}, \field{QueueReady},
    + following operations on \field{QueueSizeMax},
    + \field{QueueSize}, \field{QueueReady},
    \field{QueueDescLow}, \field{QueueDescHigh}, \field{QueueDriverlLow}, \field{QueueDriverHigh},
    \field{QueueDeviceLow}, \field{QueueDeviceHigh} and \field{QueueReset} apply to. The index
    number of the first queue is zero (0x0).
    }
    \hline
    - \mmioreg{QueueNumMax}{Maximum virtual queue size}{0x034}{R}{%
    + \mmioreg{QueueSizeMax}{Maximum virtual queue size}{0x034}{R}{%
    Reading from the register returns the maximum size (number of
    elements) of the queue the device is ready to process or
    zero (0x0) if the queue is not available. This applies to the
    queue selected by writing to \field{QueueSel}.
    + \begin{note}
    + \field{QueueSizeMax} was previously known as QueueNumMax.
    + \end{note}
    }
    \hline
    - \mmioreg{QueueNum}{Virtual queue size}{0x038}{W}{%
    + \mmioreg{QueueSize}{Virtual queue size}{0x038}{W}{%
    Queue size is the number of elements in the queue.
    Writing to this register notifies the device what size of the
    queue the driver will use. This applies to the queue selected by
    writing to \field{QueueSel}.
    + \begin{note}
    + \field{QueueSize} was previously known as QueueNum.
    + \end{note}
    }
    \hline
    \mmioreg{QueueReady}{Virtual queue ready bit}{0x044}{RW}{%
    @@ -308,11 +315,11 @@ \subsection{MMIO Device Register Layout}\label{sec:Virtio Transport Options / Vi

    Before writing to the \field{DriverFeatures} register, the driver MUST write a value to the \field{DriverFeaturesSel} register.

    -The driver MUST write a value to \field{QueueNum} which is less than
    -or equal to the value presented by the device in \field{QueueNumMax}.
    +The driver MUST write a value to \field{QueueSize} which is less than
    +or equal to the value presented by the device in \field{QueueSizeMax}.

    When \field{QueueReady} is not zero, the driver MUST NOT access
    -\field{QueueNum}, \field{QueueDescLow}, \field{QueueDescHigh},
    +\field{QueueSize}, \field{QueueDescLow}, \field{QueueDescHigh},
    \field{QueueDriverLow}, \field{QueueDriverHigh}, \field{QueueDeviceLow}, \field{QueueDeviceHigh}.

    To stop using the queue the driver MUST write zero (0x0) to this
    @@ -363,14 +370,14 @@ \subsubsection{Virtqueue Configuration}\label{sec:Virtio Transport Options / Vir
    and expect a returned value of zero (0x0).

    \item Read maximum queue size (number of elements) from
    - \field{QueueNumMax}. If the returned value is zero (0x0) the
    + \field{QueueSizeMax}. If the returned value is zero (0x0) the
    queue is not available.

    \item Allocate and zero the queue memory, making sure the memory
    is physically contiguous.

    \item Notify the device about the queue size by writing the size to
    - \field{QueueNum}.
    + \field{QueueSize}.

    \item Write physical addresses of the queue's Descriptor Area,
    Driver Area and Device Area to (respectively) the
    @@ -465,25 +472,32 @@ \subsection{Legacy interface}\label{sec:Virtio Transport Options / Virtio Over M
    \hline
    \mmioreg{QueueSel}{Virtual queue index}{0x030}{W}{%
    Writing to this register selects the virtual queue that the
    - following operations on the \field{QueueNumMax}, \field{QueueNum}, \field{QueueAlign}
    + following operations on the \field{QueueSizeMax},
    + \field{QueueSize}, \field{QueueAlign}
    and \field{QueuePFN} registers apply to. The index
    number of the first queue is zero (0x0).
    .
    }
    \hline
    - \mmioreg{QueueNumMax}{Maximum virtual queue size}{0x034}{R}{%
    + \mmioreg{QueueSizeMax}{Maximum virtual queue size}{0x034}{R}{%
    Reading from the register returns the maximum size of the queue
    the device is ready to process or zero (0x0) if the queue is not
    available. This applies to the queue selected by writing to
    \field{QueueSel} and is allowed only when \field{QueuePFN} is set to zero
    (0x0), so when the queue is not actively used.
    + \begin{note}
    + \field{QueueSizeMax} was previously known as QueueNumMax.
    + \end{note}
    }
    \hline
    - \mmioreg{QueueNum}{Virtual queue size}{0x038}{W}{%
    + \mmioreg{QueueSize}{Virtual queue size}{0x038}{W}{%
    Queue size is the number of elements in the queue.
    Writing to this register notifies the device what size of the
    queue the driver will use. This applies to the queue selected by
    writing to \field{QueueSel}.
    + \begin{note}
    + \field{QueueSize} was previously known as QueueNum.
    + \end{note}
    }
    \hline
    \mmioreg{QueueAlign}{Used Ring alignment in the virtual queue}{0x03c}{W}{%
    @@ -543,16 +557,16 @@ \subsection{Legacy interface}\label{sec:Virtio Transport Options / Virtio Over M
    expecting a returned value of zero (0x0).

    \item Read maximum queue size (number of elements) from
    - \field{QueueNumMax}. If the returned value is zero (0x0) the
    + \field{QueueSizeMax}. If the returned value is zero (0x0) the
    queue is not available.

    \item Allocate and zero the queue pages in contiguous virtual
    memory, aligning the Used Ring to an optimal boundary (usually
    page size). The driver should choose a queue size smaller than or
    - equal to \field{QueueNumMax}.
    + equal to \field{QueueSizeMax}.

    \item Notify the device about the queue size by writing the size to
    - \field{QueueNum}.
    + \field{QueueSize}.

    \item Notify the device about the used alignment by writing its value
    in bytes to \field{QueueAlign}.
    --
    2.26.2




  • 9.  [PATCH v2 2/7] transport-mmio: Rename QueueNum register

    Posted 03-21-2023 04:11
    Currently specification uses virtqueue index and number
    interchangeably to refer to the virtqueue.

    It is better to always refer to it the virtqueue in consistent manner.

    Two registers QueueNumMax and QueueNum actually reflects the queue size
    or queue depth indicating max and actual number of entries in the queue.

    These are further named differently between pci and mmio transport.
    PCI transport indicates queue size as queue_size.

    To bring consistency between pci and mmio transport, and to avoid
    confusion between number and index, rename the QueueNumMax and QueueNum
    registers to QueueSizeMax and QueueSize respectively.

    Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Signed-off-by: Parav Pandit <parav@nvidia.com>

    ---
    changelog:
    v0->v1:
    - replaced references of QueueNumMax to QueueSizeMax
    - replaced references of QueueNum to QueueSize
    - added note for renamed fields old name suggested by @Michael Tsirkin
    ---
    transport-mmio.tex | 42 ++++++++++++++++++++++++++++--------------
    1 file changed, 28 insertions(+), 14 deletions(-)

    diff --git a/transport-mmio.tex b/transport-mmio.tex
    index f884a2c..3047633 100644
    --- a/transport-mmio.tex
    +++ b/transport-mmio.tex
    @@ -110,24 +110,31 @@ \subsection{MMIO Device Register Layout}\label{sec:Virtio Transport Options / Vi
    \hline
    \mmioreg{QueueSel}{Virtual queue index}{0x030}{W}{%
    Writing to this register selects the virtual queue that the
    - following operations on \field{QueueNumMax}, \field{QueueNum}, \field{QueueReady},
    + following operations on \field{QueueSizeMax},
    + \field{QueueSize}, \field{QueueReady},
    \field{QueueDescLow}, \field{QueueDescHigh}, \field{QueueDriverlLow}, \field{QueueDriverHigh},
    \field{QueueDeviceLow}, \field{QueueDeviceHigh} and \field{QueueReset} apply to. The index
    number of the first queue is zero (0x0).
    }
    \hline
    - \mmioreg{QueueNumMax}{Maximum virtual queue size}{0x034}{R}{%
    + \mmioreg{QueueSizeMax}{Maximum virtual queue size}{0x034}{R}{%
    Reading from the register returns the maximum size (number of
    elements) of the queue the device is ready to process or
    zero (0x0) if the queue is not available. This applies to the
    queue selected by writing to \field{QueueSel}.
    + \begin{note}
    + \field{QueueSizeMax} was previously known as QueueNumMax.
    + \end{note}
    }
    \hline
    - \mmioreg{QueueNum}{Virtual queue size}{0x038}{W}{%
    + \mmioreg{QueueSize}{Virtual queue size}{0x038}{W}{%
    Queue size is the number of elements in the queue.
    Writing to this register notifies the device what size of the
    queue the driver will use. This applies to the queue selected by
    writing to \field{QueueSel}.
    + \begin{note}
    + \field{QueueSize} was previously known as QueueNum.
    + \end{note}
    }
    \hline
    \mmioreg{QueueReady}{Virtual queue ready bit}{0x044}{RW}{%
    @@ -308,11 +315,11 @@ \subsection{MMIO Device Register Layout}\label{sec:Virtio Transport Options / Vi

    Before writing to the \field{DriverFeatures} register, the driver MUST write a value to the \field{DriverFeaturesSel} register.

    -The driver MUST write a value to \field{QueueNum} which is less than
    -or equal to the value presented by the device in \field{QueueNumMax}.
    +The driver MUST write a value to \field{QueueSize} which is less than
    +or equal to the value presented by the device in \field{QueueSizeMax}.

    When \field{QueueReady} is not zero, the driver MUST NOT access
    -\field{QueueNum}, \field{QueueDescLow}, \field{QueueDescHigh},
    +\field{QueueSize}, \field{QueueDescLow}, \field{QueueDescHigh},
    \field{QueueDriverLow}, \field{QueueDriverHigh}, \field{QueueDeviceLow}, \field{QueueDeviceHigh}.

    To stop using the queue the driver MUST write zero (0x0) to this
    @@ -363,14 +370,14 @@ \subsubsection{Virtqueue Configuration}\label{sec:Virtio Transport Options / Vir
    and expect a returned value of zero (0x0).

    \item Read maximum queue size (number of elements) from
    - \field{QueueNumMax}. If the returned value is zero (0x0) the
    + \field{QueueSizeMax}. If the returned value is zero (0x0) the
    queue is not available.

    \item Allocate and zero the queue memory, making sure the memory
    is physically contiguous.

    \item Notify the device about the queue size by writing the size to
    - \field{QueueNum}.
    + \field{QueueSize}.

    \item Write physical addresses of the queue's Descriptor Area,
    Driver Area and Device Area to (respectively) the
    @@ -465,25 +472,32 @@ \subsection{Legacy interface}\label{sec:Virtio Transport Options / Virtio Over M
    \hline
    \mmioreg{QueueSel}{Virtual queue index}{0x030}{W}{%
    Writing to this register selects the virtual queue that the
    - following operations on the \field{QueueNumMax}, \field{QueueNum}, \field{QueueAlign}
    + following operations on the \field{QueueSizeMax},
    + \field{QueueSize}, \field{QueueAlign}
    and \field{QueuePFN} registers apply to. The index
    number of the first queue is zero (0x0).
    .
    }
    \hline
    - \mmioreg{QueueNumMax}{Maximum virtual queue size}{0x034}{R}{%
    + \mmioreg{QueueSizeMax}{Maximum virtual queue size}{0x034}{R}{%
    Reading from the register returns the maximum size of the queue
    the device is ready to process or zero (0x0) if the queue is not
    available. This applies to the queue selected by writing to
    \field{QueueSel} and is allowed only when \field{QueuePFN} is set to zero
    (0x0), so when the queue is not actively used.
    + \begin{note}
    + \field{QueueSizeMax} was previously known as QueueNumMax.
    + \end{note}
    }
    \hline
    - \mmioreg{QueueNum}{Virtual queue size}{0x038}{W}{%
    + \mmioreg{QueueSize}{Virtual queue size}{0x038}{W}{%
    Queue size is the number of elements in the queue.
    Writing to this register notifies the device what size of the
    queue the driver will use. This applies to the queue selected by
    writing to \field{QueueSel}.
    + \begin{note}
    + \field{QueueSize} was previously known as QueueNum.
    + \end{note}
    }
    \hline
    \mmioreg{QueueAlign}{Used Ring alignment in the virtual queue}{0x03c}{W}{%
    @@ -543,16 +557,16 @@ \subsection{Legacy interface}\label{sec:Virtio Transport Options / Virtio Over M
    expecting a returned value of zero (0x0).

    \item Read maximum queue size (number of elements) from
    - \field{QueueNumMax}. If the returned value is zero (0x0) the
    + \field{QueueSizeMax}. If the returned value is zero (0x0) the
    queue is not available.

    \item Allocate and zero the queue pages in contiguous virtual
    memory, aligning the Used Ring to an optimal boundary (usually
    page size). The driver should choose a queue size smaller than or
    - equal to \field{QueueNumMax}.
    + equal to \field{QueueSizeMax}.

    \item Notify the device about the queue size by writing the size to
    - \field{QueueNum}.
    + \field{QueueSize}.

    \item Notify the device about the used alignment by writing its value
    in bytes to \field{QueueAlign}.
    --
    2.26.2




  • 10.  [PATCH v2 3/7] transport-mmio: Refer to the vq by its number

    Posted 03-21-2023 04:11
    Currently specification uses virtqueue index and
    number interchangeably to refer to the virtqueue.

    Instead refer to it by its number.

    Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Signed-off-by: Parav Pandit <parav@nvidia.com>
    ---
    transport-mmio.tex | 14 ++++++--------
    1 file changed, 6 insertions(+), 8 deletions(-)

    diff --git a/transport-mmio.tex b/transport-mmio.tex
    index 3047633..f9b3a34 100644
    --- a/transport-mmio.tex
    +++ b/transport-mmio.tex
    @@ -108,7 +108,7 @@ \subsection{MMIO Device Register Layout}\label{sec:Virtio Transport Options / Vi
    bits accessible by writing to \field{DriverFeatures}.
    }
    \hline
    - \mmioreg{QueueSel}{Virtual queue index}{0x030}{W}{%
    + \mmioreg{QueueSel}{Virtual queue number}{0x030}{W}{%
    Writing to this register selects the virtual queue that the
    following operations on \field{QueueSizeMax},
    \field{QueueSize}, \field{QueueReady},
    @@ -149,7 +149,7 @@ \subsection{MMIO Device Register Layout}\label{sec:Virtio Transport Options / Vi
    there are new buffers to process in a queue.

    When VIRTIO_F_NOTIFICATION_DATA has not been negotiated,
    - the value written is the queue index.
    + the value written is the queue number.

    When VIRTIO_F_NOTIFICATION_DATA has been negotiated,
    the \field{Notification data} value has the following format:
    @@ -363,8 +363,7 @@ \subsubsection{Virtqueue Configuration}\label{sec:Virtio Transport Options / Vir
    The driver will typically initialize the virtual queue in the following way:

    \begin{enumerate}
    -\item Select the queue writing its index (first queue is 0) to
    - \field{QueueSel}.
    +\item Select the queue writing its number to \field{QueueSel}.

    \item Check if the queue is not already in use: read \field{QueueReady},
    and expect a returned value of zero (0x0).
    @@ -392,7 +391,7 @@ \subsubsection{Available Buffer Notifications}\label{sec:Virtio Transport Option

    When VIRTIO_F_NOTIFICATION_DATA has not been negotiated,
    the driver sends an available buffer notification to the device by writing
    -the 16-bit virtqueue index
    +the 16-bit virtqueue number
    of the queue to be notified to \field{QueueNotify}.

    When VIRTIO_F_NOTIFICATION_DATA has been negotiated,
    @@ -470,7 +469,7 @@ \subsection{Legacy interface}\label{sec:Virtio Transport Options / Virtio Over M
    (see QueuePFN).
    }
    \hline
    - \mmioreg{QueueSel}{Virtual queue index}{0x030}{W}{%
    + \mmioreg{QueueSel}{Virtual queue number}{0x030}{W}{%
    Writing to this register selects the virtual queue that the
    following operations on the \field{QueueSizeMax},
    \field{QueueSize}, \field{QueueAlign}
    @@ -550,8 +549,7 @@ \subsection{Legacy interface}\label{sec:Virtio Transport Options / Virtio Over M

    The virtual queue is configured as follows:
    \begin{enumerate}
    -\item Select the queue writing its index (first queue is 0) to
    - \field{QueueSel}.
    +\item Select the queue writing its number to \field{QueueSel}.

    \item Check if the queue is not already in use: read \field{QueuePFN},
    expecting a returned value of zero (0x0).
    --
    2.26.2




  • 11.  [PATCH v2 3/7] transport-mmio: Refer to the vq by its number

    Posted 03-21-2023 04:11
    Currently specification uses virtqueue index and
    number interchangeably to refer to the virtqueue.

    Instead refer to it by its number.

    Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Signed-off-by: Parav Pandit <parav@nvidia.com>
    ---
    transport-mmio.tex | 14 ++++++--------
    1 file changed, 6 insertions(+), 8 deletions(-)

    diff --git a/transport-mmio.tex b/transport-mmio.tex
    index 3047633..f9b3a34 100644
    --- a/transport-mmio.tex
    +++ b/transport-mmio.tex
    @@ -108,7 +108,7 @@ \subsection{MMIO Device Register Layout}\label{sec:Virtio Transport Options / Vi
    bits accessible by writing to \field{DriverFeatures}.
    }
    \hline
    - \mmioreg{QueueSel}{Virtual queue index}{0x030}{W}{%
    + \mmioreg{QueueSel}{Virtual queue number}{0x030}{W}{%
    Writing to this register selects the virtual queue that the
    following operations on \field{QueueSizeMax},
    \field{QueueSize}, \field{QueueReady},
    @@ -149,7 +149,7 @@ \subsection{MMIO Device Register Layout}\label{sec:Virtio Transport Options / Vi
    there are new buffers to process in a queue.

    When VIRTIO_F_NOTIFICATION_DATA has not been negotiated,
    - the value written is the queue index.
    + the value written is the queue number.

    When VIRTIO_F_NOTIFICATION_DATA has been negotiated,
    the \field{Notification data} value has the following format:
    @@ -363,8 +363,7 @@ \subsubsection{Virtqueue Configuration}\label{sec:Virtio Transport Options / Vir
    The driver will typically initialize the virtual queue in the following way:

    \begin{enumerate}
    -\item Select the queue writing its index (first queue is 0) to
    - \field{QueueSel}.
    +\item Select the queue writing its number to \field{QueueSel}.

    \item Check if the queue is not already in use: read \field{QueueReady},
    and expect a returned value of zero (0x0).
    @@ -392,7 +391,7 @@ \subsubsection{Available Buffer Notifications}\label{sec:Virtio Transport Option

    When VIRTIO_F_NOTIFICATION_DATA has not been negotiated,
    the driver sends an available buffer notification to the device by writing
    -the 16-bit virtqueue index
    +the 16-bit virtqueue number
    of the queue to be notified to \field{QueueNotify}.

    When VIRTIO_F_NOTIFICATION_DATA has been negotiated,
    @@ -470,7 +469,7 @@ \subsection{Legacy interface}\label{sec:Virtio Transport Options / Virtio Over M
    (see QueuePFN).
    }
    \hline
    - \mmioreg{QueueSel}{Virtual queue index}{0x030}{W}{%
    + \mmioreg{QueueSel}{Virtual queue number}{0x030}{W}{%
    Writing to this register selects the virtual queue that the
    following operations on the \field{QueueSizeMax},
    \field{QueueSize}, \field{QueueAlign}
    @@ -550,8 +549,7 @@ \subsection{Legacy interface}\label{sec:Virtio Transport Options / Virtio Over M

    The virtual queue is configured as follows:
    \begin{enumerate}
    -\item Select the queue writing its index (first queue is 0) to
    - \field{QueueSel}.
    +\item Select the queue writing its number to \field{QueueSel}.

    \item Check if the queue is not already in use: read \field{QueuePFN},
    expecting a returned value of zero (0x0).
    --
    2.26.2




  • 12.  [PATCH v2 4/7] transport-ccw: Rename queue depth/size to other transports

    Posted 03-21-2023 04:11
    max_num field reflects the maximum queue size/depth. Hence align name of
    this field with similar field in PCI and MMIO transport to
    max_queue_size.
    Similarly rename 'num' to 'size'.

    Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    Signed-off-by: Parav Pandit <parav@nvidia.com>
    ---
    transport-ccw.tex | 26 ++++++++++++++++++++------
    1 file changed, 20 insertions(+), 6 deletions(-)

    diff --git a/transport-ccw.tex b/transport-ccw.tex
    index c492cb9..c2e60b6 100644
    --- a/transport-ccw.tex
    +++ b/transport-ccw.tex
    @@ -237,12 +237,16 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    \begin{lstlisting}
    struct vq_config_block {
    be16 index;
    - be16 max_num;
    + be16 max_queue_size;
    };
    \end{lstlisting}

    The requested number of buffers for queue \field{index} is returned in
    -\field{max_num}.
    +\field{max_queue_size}.
    +
    +\begin{note}
    +\field{max_queue_size} was previously named as max_num.
    +\end{note}

    Afterwards, CCW_CMD_SET_VQ is issued by the driver to inform the
    device about the location used for its queue. The transmitted
    @@ -253,7 +257,7 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    be64 desc;
    be32 res0;
    be16 index;
    - be16 num;
    + be16 size;
    be64 driver;
    be64 device;
    };
    @@ -262,7 +266,12 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    \field{desc}, \field{driver} and \field{device} contain the guest
    addresses for the descriptor area,
    available area and used area for queue \field{index}, respectively. The actual
    -virtqueue size (number of allocated buffers) is transmitted in \field{num}.
    +virtqueue size (number of allocated buffers) is transmitted in
    +\field{size}.
    +
    +\begin{note}
    +\field{size} was previously named as num.
    +\end{note}

    \devicenormative{\paragraph}{Configuring a Virtqueue}{Virtio Transport Options / Virtio over channel I/O / Device Initialization / Configuring a Virtqueue}

    @@ -278,13 +287,18 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    be64 queue;
    be32 align;
    be16 index;
    - be16 num;
    + be16 size;
    };
    \end{lstlisting}

    -\field{queue} contains the guest address for queue \field{index}, \field{num} the number of buffers
    +\field{queue} contains the guest address for queue \field{index},
    +\field{size} the number of buffers
    and \field{align} the alignment. The queue layout follows \ref{sec:Basic Facilities of a Virtio Device / Virtqueues / Legacy Interfaces: A Note on Virtqueue Layout}~\nameref{sec:Basic Facilities of a Virtio Device / Virtqueues / Legacy Interfaces: A Note on Virtqueue Layout}.

    +\begin{note}
    +\field{size} was previously named as num.
    +\end{note}
    +
    \subsubsection{Communicating Status Information}\label{sec:Virtio Transport Options / Virtio over channel I/O / Device Initialization / Communicating Status Information}

    The driver changes the status of a device via the
    --
    2.26.2




  • 13.  [PATCH v2 4/7] transport-ccw: Rename queue depth/size to other transports

    Posted 03-21-2023 04:11
    max_num field reflects the maximum queue size/depth. Hence align name of
    this field with similar field in PCI and MMIO transport to
    max_queue_size.
    Similarly rename 'num' to 'size'.

    Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    Signed-off-by: Parav Pandit <parav@nvidia.com>
    ---
    transport-ccw.tex | 26 ++++++++++++++++++++------
    1 file changed, 20 insertions(+), 6 deletions(-)

    diff --git a/transport-ccw.tex b/transport-ccw.tex
    index c492cb9..c2e60b6 100644
    --- a/transport-ccw.tex
    +++ b/transport-ccw.tex
    @@ -237,12 +237,16 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    \begin{lstlisting}
    struct vq_config_block {
    be16 index;
    - be16 max_num;
    + be16 max_queue_size;
    };
    \end{lstlisting}

    The requested number of buffers for queue \field{index} is returned in
    -\field{max_num}.
    +\field{max_queue_size}.
    +
    +\begin{note}
    +\field{max_queue_size} was previously named as max_num.
    +\end{note}

    Afterwards, CCW_CMD_SET_VQ is issued by the driver to inform the
    device about the location used for its queue. The transmitted
    @@ -253,7 +257,7 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    be64 desc;
    be32 res0;
    be16 index;
    - be16 num;
    + be16 size;
    be64 driver;
    be64 device;
    };
    @@ -262,7 +266,12 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    \field{desc}, \field{driver} and \field{device} contain the guest
    addresses for the descriptor area,
    available area and used area for queue \field{index}, respectively. The actual
    -virtqueue size (number of allocated buffers) is transmitted in \field{num}.
    +virtqueue size (number of allocated buffers) is transmitted in
    +\field{size}.
    +
    +\begin{note}
    +\field{size} was previously named as num.
    +\end{note}

    \devicenormative{\paragraph}{Configuring a Virtqueue}{Virtio Transport Options / Virtio over channel I/O / Device Initialization / Configuring a Virtqueue}

    @@ -278,13 +287,18 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    be64 queue;
    be32 align;
    be16 index;
    - be16 num;
    + be16 size;
    };
    \end{lstlisting}

    -\field{queue} contains the guest address for queue \field{index}, \field{num} the number of buffers
    +\field{queue} contains the guest address for queue \field{index},
    +\field{size} the number of buffers
    and \field{align} the alignment. The queue layout follows \ref{sec:Basic Facilities of a Virtio Device / Virtqueues / Legacy Interfaces: A Note on Virtqueue Layout}~\nameref{sec:Basic Facilities of a Virtio Device / Virtqueues / Legacy Interfaces: A Note on Virtqueue Layout}.

    +\begin{note}
    +\field{size} was previously named as num.
    +\end{note}
    +
    \subsubsection{Communicating Status Information}\label{sec:Virtio Transport Options / Virtio over channel I/O / Device Initialization / Communicating Status Information}

    The driver changes the status of a device via the
    --
    2.26.2




  • 14.  [PATCH v2 5/7] transport-ccw: Refer to the vq by its number

    Posted 03-21-2023 04:11
    Currently specification uses virtqueue index and
    number interchangeably to refer to the virtqueue.

    Instead refer to it by its number.

    Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    Signed-off-by: Parav Pandit <parav@nvidia.com>

    ---
    changelog:
    v0->v1:
    - new patch
    ---
    transport-ccw.tex | 15 ++++++++-------
    1 file changed, 8 insertions(+), 7 deletions(-)

    diff --git a/transport-ccw.tex b/transport-ccw.tex
    index c2e60b6..b8ba0b7 100644
    --- a/transport-ccw.tex
    +++ b/transport-ccw.tex
    @@ -236,12 +236,12 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir

    \begin{lstlisting}
    struct vq_config_block {
    - be16 index;
    + be16 queue_select;
    be16 max_queue_size;
    };
    \end{lstlisting}

    -The requested number of buffers for queue \field{index} is returned in
    +The requested number of buffers for queue \field{queue_select} is returned in
    \field{max_queue_size}.

    \begin{note}
    @@ -256,7 +256,7 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    struct vq_info_block {
    be64 desc;
    be32 res0;
    - be16 index;
    + be16 queue_select;
    be16 size;
    be64 driver;
    be64 device;
    @@ -265,7 +265,7 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir

    \field{desc}, \field{driver} and \field{device} contain the guest
    addresses for the descriptor area,
    -available area and used area for queue \field{index}, respectively. The actual
    +available area and used area for queue number \field{queue_select}, respectively. The actual
    virtqueue size (number of allocated buffers) is transmitted in
    \field{size}.

    @@ -286,12 +286,13 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    struct vq_info_block_legacy {
    be64 queue;
    be32 align;
    - be16 index;
    + be16 queue_select;
    be16 size;
    };
    \end{lstlisting}

    -\field{queue} contains the guest address for queue \field{index},
    +\field{queue} contains the guest address for queue number
    +\field{queue_select},
    \field{size} the number of buffers
    and \field{align} the alignment. The queue layout follows \ref{sec:Basic Facilities of a Virtio Device / Virtqueues / Legacy Interfaces: A Note on Virtqueue Layout}~\nameref{sec:Basic Facilities of a Virtio Device / Virtqueues / Legacy Interfaces: A Note on Virtqueue Layout}.

    @@ -583,7 +584,7 @@ \subsubsection{Guest->Host Notification}\label{sec:Virtio Transport Options / Vi
    For example:
    \begin{lstlisting}
    info->cookie = do_notify(schid,
    - virtqueue_get_queue_index(vq),
    + virtqueue_get_queue_number(vq),
    info->cookie);
    \end{lstlisting}
    \end{note}
    --
    2.26.2




  • 15.  [PATCH v2 5/7] transport-ccw: Refer to the vq by its number

    Posted 03-21-2023 04:11
    Currently specification uses virtqueue index and
    number interchangeably to refer to the virtqueue.

    Instead refer to it by its number.

    Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    Signed-off-by: Parav Pandit <parav@nvidia.com>

    ---
    changelog:
    v0->v1:
    - new patch
    ---
    transport-ccw.tex | 15 ++++++++-------
    1 file changed, 8 insertions(+), 7 deletions(-)

    diff --git a/transport-ccw.tex b/transport-ccw.tex
    index c2e60b6..b8ba0b7 100644
    --- a/transport-ccw.tex
    +++ b/transport-ccw.tex
    @@ -236,12 +236,12 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir

    \begin{lstlisting}
    struct vq_config_block {
    - be16 index;
    + be16 queue_select;
    be16 max_queue_size;
    };
    \end{lstlisting}

    -The requested number of buffers for queue \field{index} is returned in
    +The requested number of buffers for queue \field{queue_select} is returned in
    \field{max_queue_size}.

    \begin{note}
    @@ -256,7 +256,7 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    struct vq_info_block {
    be64 desc;
    be32 res0;
    - be16 index;
    + be16 queue_select;
    be16 size;
    be64 driver;
    be64 device;
    @@ -265,7 +265,7 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir

    \field{desc}, \field{driver} and \field{device} contain the guest
    addresses for the descriptor area,
    -available area and used area for queue \field{index}, respectively. The actual
    +available area and used area for queue number \field{queue_select}, respectively. The actual
    virtqueue size (number of allocated buffers) is transmitted in
    \field{size}.

    @@ -286,12 +286,13 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    struct vq_info_block_legacy {
    be64 queue;
    be32 align;
    - be16 index;
    + be16 queue_select;
    be16 size;
    };
    \end{lstlisting}

    -\field{queue} contains the guest address for queue \field{index},
    +\field{queue} contains the guest address for queue number
    +\field{queue_select},
    \field{size} the number of buffers
    and \field{align} the alignment. The queue layout follows \ref{sec:Basic Facilities of a Virtio Device / Virtqueues / Legacy Interfaces: A Note on Virtqueue Layout}~\nameref{sec:Basic Facilities of a Virtio Device / Virtqueues / Legacy Interfaces: A Note on Virtqueue Layout}.

    @@ -583,7 +584,7 @@ \subsubsection{Guest->Host Notification}\label{sec:Virtio Transport Options / Vi
    For example:
    \begin{lstlisting}
    info->cookie = do_notify(schid,
    - virtqueue_get_queue_index(vq),
    + virtqueue_get_queue_number(vq),
    info->cookie);
    \end{lstlisting}
    \end{note}
    --
    2.26.2




  • 16.  Re: [PATCH v2 5/7] transport-ccw: Refer to the vq by its number

    Posted 03-21-2023 08:47
    On Tue, Mar 21, 2023 at 06:10:34AM +0200, Parav Pandit wrote:
    > Currently specification uses virtqueue index and
    > number interchangeably to refer to the virtqueue.
    >
    > Instead refer to it by its number.
    >
    > Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    > Signed-off-by: Parav Pandit <parav@nvidia.com>

    OK, but I'd say it's worth referring to the old name here, too.

    > ---
    > changelog:
    > v0->v1:
    > - new patch
    > ---
    > transport-ccw.tex | 15 ++++++++-------
    > 1 file changed, 8 insertions(+), 7 deletions(-)
    >
    > diff --git a/transport-ccw.tex b/transport-ccw.tex
    > index c2e60b6..b8ba0b7 100644
    > --- a/transport-ccw.tex
    > +++ b/transport-ccw.tex
    > @@ -236,12 +236,12 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    >
    > \begin{lstlisting}
    > struct vq_config_block {
    > - be16 index;
    > + be16 queue_select;
    > be16 max_queue_size;
    > };
    > \end{lstlisting}
    >
    > -The requested number of buffers for queue \field{index} is returned in
    > +The requested number of buffers for queue \field{queue_select} is returned in
    > \field{max_queue_size}.
    >
    > \begin{note}
    > @@ -256,7 +256,7 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    > struct vq_info_block {
    > be64 desc;
    > be32 res0;
    > - be16 index;
    > + be16 queue_select;

    /* Previously known as index */

    > be16 size;
    > be64 driver;
    > be64 device;
    > @@ -265,7 +265,7 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    >
    > \field{desc}, \field{driver} and \field{device} contain the guest
    > addresses for the descriptor area,
    > -available area and used area for queue \field{index}, respectively. The actual
    > +available area and used area for queue number \field{queue_select}, respectively. The actual
    > virtqueue size (number of allocated buffers) is transmitted in
    > \field{size}.
    >
    > @@ -286,12 +286,13 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    > struct vq_info_block_legacy {
    > be64 queue;
    > be32 align;
    > - be16 index;
    > + be16 queue_select;

    /* Previously known as index */

    > be16 size;
    > };
    > \end{lstlisting}
    >
    > -\field{queue} contains the guest address for queue \field{index},
    > +\field{queue} contains the guest address for queue number
    > +\field{queue_select},
    > \field{size} the number of buffers
    > and \field{align} the alignment. The queue layout follows \ref{sec:Basic Facilities of a Virtio Device / Virtqueues / Legacy Interfaces: A Note on Virtqueue Layout}~\nameref{sec:Basic Facilities of a Virtio Device / Virtqueues / Legacy Interfaces: A Note on Virtqueue Layout}.
    >
    > @@ -583,7 +584,7 @@ \subsubsection{Guest->Host Notification}\label{sec:Virtio Transport Options / Vi
    > For example:
    > \begin{lstlisting}
    > info->cookie = do_notify(schid,
    > - virtqueue_get_queue_index(vq),
    > + virtqueue_get_queue_number(vq),
    > info->cookie);
    > \end{lstlisting}
    > \end{note}
    > --
    > 2.26.2




  • 17.  Re: [PATCH v2 5/7] transport-ccw: Refer to the vq by its number

    Posted 03-21-2023 08:47
    On Tue, Mar 21, 2023 at 06:10:34AM +0200, Parav Pandit wrote:
    > Currently specification uses virtqueue index and
    > number interchangeably to refer to the virtqueue.
    >
    > Instead refer to it by its number.
    >
    > Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    > Signed-off-by: Parav Pandit <parav@nvidia.com>

    OK, but I'd say it's worth referring to the old name here, too.

    > ---
    > changelog:
    > v0->v1:
    > - new patch
    > ---
    > transport-ccw.tex | 15 ++++++++-------
    > 1 file changed, 8 insertions(+), 7 deletions(-)
    >
    > diff --git a/transport-ccw.tex b/transport-ccw.tex
    > index c2e60b6..b8ba0b7 100644
    > --- a/transport-ccw.tex
    > +++ b/transport-ccw.tex
    > @@ -236,12 +236,12 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    >
    > \begin{lstlisting}
    > struct vq_config_block {
    > - be16 index;
    > + be16 queue_select;
    > be16 max_queue_size;
    > };
    > \end{lstlisting}
    >
    > -The requested number of buffers for queue \field{index} is returned in
    > +The requested number of buffers for queue \field{queue_select} is returned in
    > \field{max_queue_size}.
    >
    > \begin{note}
    > @@ -256,7 +256,7 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    > struct vq_info_block {
    > be64 desc;
    > be32 res0;
    > - be16 index;
    > + be16 queue_select;

    /* Previously known as index */

    > be16 size;
    > be64 driver;
    > be64 device;
    > @@ -265,7 +265,7 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    >
    > \field{desc}, \field{driver} and \field{device} contain the guest
    > addresses for the descriptor area,
    > -available area and used area for queue \field{index}, respectively. The actual
    > +available area and used area for queue number \field{queue_select}, respectively. The actual
    > virtqueue size (number of allocated buffers) is transmitted in
    > \field{size}.
    >
    > @@ -286,12 +286,13 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir
    > struct vq_info_block_legacy {
    > be64 queue;
    > be32 align;
    > - be16 index;
    > + be16 queue_select;

    /* Previously known as index */

    > be16 size;
    > };
    > \end{lstlisting}
    >
    > -\field{queue} contains the guest address for queue \field{index},
    > +\field{queue} contains the guest address for queue number
    > +\field{queue_select},
    > \field{size} the number of buffers
    > and \field{align} the alignment. The queue layout follows \ref{sec:Basic Facilities of a Virtio Device / Virtqueues / Legacy Interfaces: A Note on Virtqueue Layout}~\nameref{sec:Basic Facilities of a Virtio Device / Virtqueues / Legacy Interfaces: A Note on Virtqueue Layout}.
    >
    > @@ -583,7 +584,7 @@ \subsubsection{Guest->Host Notification}\label{sec:Virtio Transport Options / Vi
    > For example:
    > \begin{lstlisting}
    > info->cookie = do_notify(schid,
    > - virtqueue_get_queue_index(vq),
    > + virtqueue_get_queue_number(vq),
    > info->cookie);
    > \end{lstlisting}
    > \end{note}
    > --
    > 2.26.2




  • 18.  [PATCH v2 6/7] virtio-net: Avoid duplicate receive queue example

    Posted 03-21-2023 04:11
    Receive queue number/index example is duplicate which is already defined
    in the Setting RSS parameters section.

    Hence, avoid such duplicate example and prepare it for the subsequent
    patch to describe using receive queue handle.

    Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    Signed-off-by: Parav Pandit <parav@nvidia.com>
    ---
    device-types/net/description.tex | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/device-types/net/description.tex b/device-types/net/description.tex
    index d7c8b1b..435c1fc 100644
    --- a/device-types/net/description.tex
    +++ b/device-types/net/description.tex
    @@ -1467,8 +1467,8 @@ \subsubsection{Control Virtqueue}\label{sec:Device Types / Network Device / Devi
    The device MUST determine the destination queue for a network packet as follows:
    \begin{itemize}
    \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 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.
    +\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.
    \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}

    --
    2.26.2




  • 19.  [PATCH v2 6/7] virtio-net: Avoid duplicate receive queue example

    Posted 03-21-2023 04:11
    Receive queue number/index example is duplicate which is already defined
    in the Setting RSS parameters section.

    Hence, avoid such duplicate example and prepare it for the subsequent
    patch to describe using receive queue handle.

    Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    Signed-off-by: Parav Pandit <parav@nvidia.com>
    ---
    device-types/net/description.tex | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/device-types/net/description.tex b/device-types/net/description.tex
    index d7c8b1b..435c1fc 100644
    --- a/device-types/net/description.tex
    +++ b/device-types/net/description.tex
    @@ -1467,8 +1467,8 @@ \subsubsection{Control Virtqueue}\label{sec:Device Types / Network Device / Devi
    The device MUST determine the destination queue for a network packet as follows:
    \begin{itemize}
    \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 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.
    +\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.
    \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}

    --
    2.26.2




  • 20.  [PATCH v2 7/7] virtio-net: Describe RSS using receive queue handle

    Posted 03-21-2023 04:11
    The content of indirection table and unclassified_queue which are
    based on math calculation historically. To better describe this, to
    avoid intermixing array index with virtqueue index and to use virtqueue
    number

    introduce a field rq_handle (receive queue handle) and refer them
    to describe unclassified_queue and indirection_table fields.

    As part of it, have the example that uses non zero virtqueue
    number which helps to have better mapping between receiveX
    object with virtqueue number and the actual value in the
    indirection table.

    Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    Signed-off-by: Parav Pandit <parav@nvidia.com>

    ---
    changelog:
    v0->v1:
    - new patch suggested by Michael Tsirkin
    ---
    device-types/net/description.tex | 24 +++++++++++++++++++-----
    1 file changed, 19 insertions(+), 5 deletions(-)

    diff --git a/device-types/net/description.tex b/device-types/net/description.tex
    index 435c1fc..fa9b4c7 100644
    --- a/device-types/net/description.tex
    +++ b/device-types/net/description.tex
    @@ -1442,20 +1442,32 @@ \subsubsection{Control Virtqueue}\label{sec:Device Types / Network Device / Devi
    \field{indirection_table} array.
    Number of entries in \field{indirection_table} is (\field{indirection_table_mask} + 1).

    -Field \field{unclassified_queue} contains the 0-based index of
    -the receive virtqueue to place unclassified packets in. Index 0 corresponds to receiveq1.
    +Field \field{unclassified_queue} contains the receive queue
    +handle \field{rq_handle} described below.

    -Field \field{indirection_table} contains an array of 0-based indices of receive virtqueues. Index 0 corresponds to receiveq1.
    +Field \field{indirection_table} contains an array of receive
    +queue handles described below in \field{rq_handle}. For example at
    +array index 0, a value of 3 maps to virtqueue number 6
    +which corresponds to receiveq4.

    A driver sets \field{max_tx_vq} to inform a device how many transmit virtqueues it may use (transmitq1\ldots transmitq \field{max_tx_vq}).

    Fields \field{hash_key_length} and \field{hash_key_data} define the key to be used in hash calculation.

    +\begin{lstlisting}
    +le16 rq_handle;
    +\end{lstlisting}
    +
    +\field{rq_handle} is a receive virtqueue handle. It is calculated as
    +virtqueue number divided by 2. For example a receive virtqueue handle
    +value of 3 corresponds to virtqueue number 6 maps to receiveq4.
    +
    \drivernormative{\subparagraph}{Setting RSS parameters}{Device Types / Network Device / Device Operation / Control Virtqueue / Receive-side scaling (RSS) }

    A driver MUST NOT send the VIRTIO_NET_CTRL_MQ_RSS_CONFIG command if the feature VIRTIO_NET_F_RSS has not been negotiated.

    -A driver MUST fill the \field{indirection_table} array only with indices of enabled queues. Index 0 corresponds to receiveq1.
    +A driver MUST fill the \field{indirection_table} array only with
    +the \field{rq_handle} corresponding to the enabled receive virtqueues.

    The number of entries in \field{indirection_table} (\field{indirection_table_mask} + 1) MUST be a power of two.

    @@ -1468,7 +1480,9 @@ \subsubsection{Control Virtqueue}\label{sec:Device Types / Network Device / Devi
    \begin{itemize}
    \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.
    -\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.
    +\item Apply \field{indirection_table_mask} to the calculated hash
    +and use the result as the index in the indirection table to get
    +\field{rq_handle}.
    \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}

    --
    2.26.2




  • 21.  [PATCH v2 7/7] virtio-net: Describe RSS using receive queue handle

    Posted 03-21-2023 04:11
    The content of indirection table and unclassified_queue which are
    based on math calculation historically. To better describe this, to
    avoid intermixing array index with virtqueue index and to use virtqueue
    number

    introduce a field rq_handle (receive queue handle) and refer them
    to describe unclassified_queue and indirection_table fields.

    As part of it, have the example that uses non zero virtqueue
    number which helps to have better mapping between receiveX
    object with virtqueue number and the actual value in the
    indirection table.

    Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    Signed-off-by: Parav Pandit <parav@nvidia.com>

    ---
    changelog:
    v0->v1:
    - new patch suggested by Michael Tsirkin
    ---
    device-types/net/description.tex | 24 +++++++++++++++++++-----
    1 file changed, 19 insertions(+), 5 deletions(-)

    diff --git a/device-types/net/description.tex b/device-types/net/description.tex
    index 435c1fc..fa9b4c7 100644
    --- a/device-types/net/description.tex
    +++ b/device-types/net/description.tex
    @@ -1442,20 +1442,32 @@ \subsubsection{Control Virtqueue}\label{sec:Device Types / Network Device / Devi
    \field{indirection_table} array.
    Number of entries in \field{indirection_table} is (\field{indirection_table_mask} + 1).

    -Field \field{unclassified_queue} contains the 0-based index of
    -the receive virtqueue to place unclassified packets in. Index 0 corresponds to receiveq1.
    +Field \field{unclassified_queue} contains the receive queue
    +handle \field{rq_handle} described below.

    -Field \field{indirection_table} contains an array of 0-based indices of receive virtqueues. Index 0 corresponds to receiveq1.
    +Field \field{indirection_table} contains an array of receive
    +queue handles described below in \field{rq_handle}. For example at
    +array index 0, a value of 3 maps to virtqueue number 6
    +which corresponds to receiveq4.

    A driver sets \field{max_tx_vq} to inform a device how many transmit virtqueues it may use (transmitq1\ldots transmitq \field{max_tx_vq}).

    Fields \field{hash_key_length} and \field{hash_key_data} define the key to be used in hash calculation.

    +\begin{lstlisting}
    +le16 rq_handle;
    +\end{lstlisting}
    +
    +\field{rq_handle} is a receive virtqueue handle. It is calculated as
    +virtqueue number divided by 2. For example a receive virtqueue handle
    +value of 3 corresponds to virtqueue number 6 maps to receiveq4.
    +
    \drivernormative{\subparagraph}{Setting RSS parameters}{Device Types / Network Device / Device Operation / Control Virtqueue / Receive-side scaling (RSS) }

    A driver MUST NOT send the VIRTIO_NET_CTRL_MQ_RSS_CONFIG command if the feature VIRTIO_NET_F_RSS has not been negotiated.

    -A driver MUST fill the \field{indirection_table} array only with indices of enabled queues. Index 0 corresponds to receiveq1.
    +A driver MUST fill the \field{indirection_table} array only with
    +the \field{rq_handle} corresponding to the enabled receive virtqueues.

    The number of entries in \field{indirection_table} (\field{indirection_table_mask} + 1) MUST be a power of two.

    @@ -1468,7 +1480,9 @@ \subsubsection{Control Virtqueue}\label{sec:Device Types / Network Device / Devi
    \begin{itemize}
    \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.
    -\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.
    +\item Apply \field{indirection_table_mask} to the calculated hash
    +and use the result as the index in the indirection table to get
    +\field{rq_handle}.
    \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}

    --
    2.26.2




  • 22.  Re: [PATCH v2 7/7] virtio-net: Describe RSS using receive queue handle

    Posted 03-21-2023 08:56
    On Tue, Mar 21, 2023 at 06:10:36AM +0200, Parav Pandit wrote:
    > The content of indirection table and unclassified_queue which are
    > based on math calculation historically. To better describe this, to
    > avoid intermixing array index with virtqueue index and to use virtqueue
    > number
    >
    > introduce a field rq_handle (receive queue handle) and refer them
    > to describe unclassified_queue and indirection_table fields.
    >
    > As part of it, have the example that uses non zero virtqueue
    > number which helps to have better mapping between receiveX
    > object with virtqueue number and the actual value in the
    > indirection table.
    >
    > Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    > Signed-off-by: Parav Pandit <parav@nvidia.com>
    >
    > ---
    > changelog:
    > v0->v1:
    > - new patch suggested by Michael Tsirkin
    > ---
    > device-types/net/description.tex | 24 +++++++++++++++++++-----
    > 1 file changed, 19 insertions(+), 5 deletions(-)
    >
    > diff --git a/device-types/net/description.tex b/device-types/net/description.tex
    > index 435c1fc..fa9b4c7 100644
    > --- a/device-types/net/description.tex
    > +++ b/device-types/net/description.tex
    > @@ -1442,20 +1442,32 @@ \subsubsection{Control Virtqueue}\label{sec:Device Types / Network Device / Devi
    > \field{indirection_table} array.
    > Number of entries in \field{indirection_table} is (\field{indirection_table_mask} + 1).
    >
    > -Field \field{unclassified_queue} contains the 0-based index of
    > -the receive virtqueue to place unclassified packets in. Index 0 corresponds to receiveq1.
    > +Field \field{unclassified_queue} contains the receive queue
    > +handle \field{rq_handle} described below.
    >
    > -Field \field{indirection_table} contains an array of 0-based indices of receive virtqueues. Index 0 corresponds to receiveq1.
    > +Field \field{indirection_table} contains an array of receive
    > +queue handles described below in \field{rq_handle}.


    This is only used once, here. I understand that we need a name
    for this but it need not be so generic, I feel it's just confusing.
    I propose "indirection table entry".

    Thus:
    Field \field{indirection_table} contains an array of
    indirection table entries. Each indirection table entry consists of a
    vq number value divided by 2. Thus, an entry value of 3 maps to virtqueue number 6
    which corresponds to receiveq4



    > For example at
    > +array index 0,

    why mention array index here?

    > a value of 3 maps to virtqueue number 6
    > +which corresponds to receiveq4.

    It's a good idea to first describe a concept then provide
    an example.


    > A driver sets \field{max_tx_vq} to inform a device how many transmit virtqueues it may use (transmitq1\ldots transmitq \field{max_tx_vq}).
    >
    > Fields \field{hash_key_length} and \field{hash_key_data} define the key to be used in hash calculation.
    >
    > +\begin{lstlisting}
    > +le16 rq_handle;
    > +\end{lstlisting}
    > +
    > +\field{rq_handle} is a receive virtqueue handle. It is calculated as
    > +virtqueue number divided by 2. For example a receive virtqueue handle
    > +value of 3 corresponds to virtqueue number 6 maps to receiveq4.
    > +

    it's a bit disconnected from the rest of the description. why not
    adjacent to it?

    > \drivernormative{\subparagraph}{Setting RSS parameters}{Device Types / Network Device / Device Operation / Control Virtqueue / Receive-side scaling (RSS) }
    >
    > A driver MUST NOT send the VIRTIO_NET_CTRL_MQ_RSS_CONFIG command if the feature VIRTIO_NET_F_RSS has not been negotiated.
    >
    > -A driver MUST fill the \field{indirection_table} array only with indices of enabled queues. Index 0 corresponds to receiveq1.
    > +A driver MUST fill the \field{indirection_table} array only with
    > +the \field{rq_handle} corresponding to the enabled receive virtqueues.
    >
    > The number of entries in \field{indirection_table} (\field{indirection_table_mask} + 1) MUST be a power of two.
    >
    > @@ -1468,7 +1480,9 @@ \subsubsection{Control Virtqueue}\label{sec:Device Types / Network Device / Devi
    > \begin{itemize}
    > \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.
    > -\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.
    > +\item Apply \field{indirection_table_mask} to the calculated hash
    > +and use the result as the index in the indirection table to get
    > +\field{rq_handle}.
    > \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}
    >
    > --
    > 2.26.2




  • 23.  Re: [PATCH v2 7/7] virtio-net: Describe RSS using receive queue handle

    Posted 03-21-2023 08:56
    On Tue, Mar 21, 2023 at 06:10:36AM +0200, Parav Pandit wrote:
    > The content of indirection table and unclassified_queue which are
    > based on math calculation historically. To better describe this, to
    > avoid intermixing array index with virtqueue index and to use virtqueue
    > number
    >
    > introduce a field rq_handle (receive queue handle) and refer them
    > to describe unclassified_queue and indirection_table fields.
    >
    > As part of it, have the example that uses non zero virtqueue
    > number which helps to have better mapping between receiveX
    > object with virtqueue number and the actual value in the
    > indirection table.
    >
    > Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163
    > Signed-off-by: Parav Pandit <parav@nvidia.com>
    >
    > ---
    > changelog:
    > v0->v1:
    > - new patch suggested by Michael Tsirkin
    > ---
    > device-types/net/description.tex | 24 +++++++++++++++++++-----
    > 1 file changed, 19 insertions(+), 5 deletions(-)
    >
    > diff --git a/device-types/net/description.tex b/device-types/net/description.tex
    > index 435c1fc..fa9b4c7 100644
    > --- a/device-types/net/description.tex
    > +++ b/device-types/net/description.tex
    > @@ -1442,20 +1442,32 @@ \subsubsection{Control Virtqueue}\label{sec:Device Types / Network Device / Devi
    > \field{indirection_table} array.
    > Number of entries in \field{indirection_table} is (\field{indirection_table_mask} + 1).
    >
    > -Field \field{unclassified_queue} contains the 0-based index of
    > -the receive virtqueue to place unclassified packets in. Index 0 corresponds to receiveq1.
    > +Field \field{unclassified_queue} contains the receive queue
    > +handle \field{rq_handle} described below.
    >
    > -Field \field{indirection_table} contains an array of 0-based indices of receive virtqueues. Index 0 corresponds to receiveq1.
    > +Field \field{indirection_table} contains an array of receive
    > +queue handles described below in \field{rq_handle}.


    This is only used once, here. I understand that we need a name
    for this but it need not be so generic, I feel it's just confusing.
    I propose "indirection table entry".

    Thus:
    Field \field{indirection_table} contains an array of
    indirection table entries. Each indirection table entry consists of a
    vq number value divided by 2. Thus, an entry value of 3 maps to virtqueue number 6
    which corresponds to receiveq4



    > For example at
    > +array index 0,

    why mention array index here?

    > a value of 3 maps to virtqueue number 6
    > +which corresponds to receiveq4.

    It's a good idea to first describe a concept then provide
    an example.


    > A driver sets \field{max_tx_vq} to inform a device how many transmit virtqueues it may use (transmitq1\ldots transmitq \field{max_tx_vq}).
    >
    > Fields \field{hash_key_length} and \field{hash_key_data} define the key to be used in hash calculation.
    >
    > +\begin{lstlisting}
    > +le16 rq_handle;
    > +\end{lstlisting}
    > +
    > +\field{rq_handle} is a receive virtqueue handle. It is calculated as
    > +virtqueue number divided by 2. For example a receive virtqueue handle
    > +value of 3 corresponds to virtqueue number 6 maps to receiveq4.
    > +

    it's a bit disconnected from the rest of the description. why not
    adjacent to it?

    > \drivernormative{\subparagraph}{Setting RSS parameters}{Device Types / Network Device / Device Operation / Control Virtqueue / Receive-side scaling (RSS) }
    >
    > A driver MUST NOT send the VIRTIO_NET_CTRL_MQ_RSS_CONFIG command if the feature VIRTIO_NET_F_RSS has not been negotiated.
    >
    > -A driver MUST fill the \field{indirection_table} array only with indices of enabled queues. Index 0 corresponds to receiveq1.
    > +A driver MUST fill the \field{indirection_table} array only with
    > +the \field{rq_handle} corresponding to the enabled receive virtqueues.
    >
    > The number of entries in \field{indirection_table} (\field{indirection_table_mask} + 1) MUST be a power of two.
    >
    > @@ -1468,7 +1480,9 @@ \subsubsection{Control Virtqueue}\label{sec:Device Types / Network Device / Devi
    > \begin{itemize}
    > \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.
    > -\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.
    > +\item Apply \field{indirection_table_mask} to the calculated hash
    > +and use the result as the index in the indirection table to get
    > +\field{rq_handle}.
    > \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}
    >
    > --
    > 2.26.2




  • 24.  RE: [PATCH v2 7/7] virtio-net: Describe RSS using receive queue handle

    Posted 03-21-2023 20:54


    > From: Michael S. Tsirkin <mst@redhat.com>
    > Sent: Tuesday, March 21, 2023 4:56 AM

    [..]
    > \field{indirection_table} array.
    > > Number of entries in \field{indirection_table} is
    > (\field{indirection_table_mask} + 1).
    > >
    > > -Field \field{unclassified_queue} contains the 0-based index of -the
    > > receive virtqueue to place unclassified packets in. Index 0 corresponds to
    > receiveq1.
    > > +Field \field{unclassified_queue} contains the receive queue handle
    > > +\field{rq_handle} described below.
    > >
    > > -Field \field{indirection_table} contains an array of 0-based indices of receive
    > virtqueues. Index 0 corresponds to receiveq1.
    > > +Field \field{indirection_table} contains an array of receive queue
    > > +handles described below in \field{rq_handle}.
    >
    >
    > This is only used once, here. I understand that we need a name for this but it
    > need not be so generic, I feel it's just confusing.
    > I propose "indirection table entry".
    >
    Unclassified_queue field also refers to it.
    Need to duplicate the below description there too.
    So using rq_handle simplified it.
    May be it can be duplicated as
    Unclassified_queue consists of vq number value divided by two.

    And avoid rq_handle definition.

    > Thus:
    > Field \field{indirection_table} contains an array of
    > indirection table entries. Each indirection table entry consists of a
    > vq number value divided by 2. Thus, an entry value of 3 maps to
    > virtqueue number 6
    > which corresponds to receiveq4
    >
    >
    >
    > > For example at
    > > +array index 0,
    >
    > why mention array index here?
    >
    Since we are mentioning an indirection table array, referring to an array entry without referring to the array index was little odd.
    After reading your above example, it doesn't look that odd.

    > > a value of 3 maps to virtqueue number 6
    > > +which corresponds to receiveq4.
    >
    > It's a good idea to first describe a concept then provide an example.
    >
    True, but it was not too far with pointer to describe below.
    >
    > > A driver sets \field{max_tx_vq} to inform a device how many transmit
    > virtqueues it may use (transmitq1\ldots transmitq \field{max_tx_vq}).
    > >
    > > Fields \field{hash_key_length} and \field{hash_key_data} define the key to be
    > used in hash calculation.
    > >
    > > +\begin{lstlisting}
    > > +le16 rq_handle;
    > > +\end{lstlisting}
    > > +
    > > +\field{rq_handle} is a receive virtqueue handle. It is calculated as
    > > +virtqueue number divided by 2. For example a receive virtqueue handle
    > > +value of 3 corresponds to virtqueue number 6 maps to receiveq4.
    > > +
    >
    > it's a bit disconnected from the rest of the description. why not adjacent to it?
    >
    Sure it can move up before max_tx_vq or before introducing unclassified_queue.

    But I guess we can describe by duplicating the text and avoiding rq_handle as you suggest.
    Will simplify this in v3.




  • 25.  RE: [PATCH v2 7/7] virtio-net: Describe RSS using receive queue handle

    Posted 03-21-2023 20:54


    > From: Michael S. Tsirkin <mst@redhat.com>
    > Sent: Tuesday, March 21, 2023 4:56 AM

    [..]
    > \field{indirection_table} array.
    > > Number of entries in \field{indirection_table} is
    > (\field{indirection_table_mask} + 1).
    > >
    > > -Field \field{unclassified_queue} contains the 0-based index of -the
    > > receive virtqueue to place unclassified packets in. Index 0 corresponds to
    > receiveq1.
    > > +Field \field{unclassified_queue} contains the receive queue handle
    > > +\field{rq_handle} described below.
    > >
    > > -Field \field{indirection_table} contains an array of 0-based indices of receive
    > virtqueues. Index 0 corresponds to receiveq1.
    > > +Field \field{indirection_table} contains an array of receive queue
    > > +handles described below in \field{rq_handle}.
    >
    >
    > This is only used once, here. I understand that we need a name for this but it
    > need not be so generic, I feel it's just confusing.
    > I propose "indirection table entry".
    >
    Unclassified_queue field also refers to it.
    Need to duplicate the below description there too.
    So using rq_handle simplified it.
    May be it can be duplicated as
    Unclassified_queue consists of vq number value divided by two.

    And avoid rq_handle definition.

    > Thus:
    > Field \field{indirection_table} contains an array of
    > indirection table entries. Each indirection table entry consists of a
    > vq number value divided by 2. Thus, an entry value of 3 maps to
    > virtqueue number 6
    > which corresponds to receiveq4
    >
    >
    >
    > > For example at
    > > +array index 0,
    >
    > why mention array index here?
    >
    Since we are mentioning an indirection table array, referring to an array entry without referring to the array index was little odd.
    After reading your above example, it doesn't look that odd.

    > > a value of 3 maps to virtqueue number 6
    > > +which corresponds to receiveq4.
    >
    > It's a good idea to first describe a concept then provide an example.
    >
    True, but it was not too far with pointer to describe below.
    >
    > > A driver sets \field{max_tx_vq} to inform a device how many transmit
    > virtqueues it may use (transmitq1\ldots transmitq \field{max_tx_vq}).
    > >
    > > Fields \field{hash_key_length} and \field{hash_key_data} define the key to be
    > used in hash calculation.
    > >
    > > +\begin{lstlisting}
    > > +le16 rq_handle;
    > > +\end{lstlisting}
    > > +
    > > +\field{rq_handle} is a receive virtqueue handle. It is calculated as
    > > +virtqueue number divided by 2. For example a receive virtqueue handle
    > > +value of 3 corresponds to virtqueue number 6 maps to receiveq4.
    > > +
    >
    > it's a bit disconnected from the rest of the description. why not adjacent to it?
    >
    Sure it can move up before max_tx_vq or before introducing unclassified_queue.

    But I guess we can describe by duplicating the text and avoiding rq_handle as you suggest.
    Will simplify this in v3.




  • 26.  Re: [PATCH v2 0/7] Rename queue index to queue number

    Posted 03-21-2023 09:06
    On Tue, Mar 21, 2023 at 06:10:29AM +0200, Parav Pandit wrote:
    > 1. Currently, virtqueue is identified between driver and device
    > interchangeably using either number of index terminology.
    >
    > 2. Between PCI and MMIO transport the queue size (depth) is
    > defined as queue_size and QueueNum respectively.
    >
    > To avoid confusion and to have consistency, unify them to use as Number.
    >
    > Solution:
    > a. Use virtqueue number description, and rename MMIO register as QueueSize.
    > b. Replace virtqueue index to virtqueue number
    > c. RSS area of virtio net has inherited some logic, describe it
    > using abstract rq_handle.
    >
    > Patch summary:
    > patch-1 renames index to number for pci transport
    > patch-2 renames mmio register from Num to Size
    > patch-3 renames index to number for mmio transport
    > patch-4 renames num field to size for ccw transport
    > patch-5 renames index field to queue_select for ccw transport
    > patch-6 for virtio-net removes duplicate example from requirements
    > patch-7 for virtio-net updates rss description to use vq number
    >
    > This series only improves the documentation, it does not change any
    > transport or device functionality.
    >
    > Please review.
    > This series fixes the issue [1].
    >
    > [1] https://github.com/oasis-tcs/virtio-spec/issues/163

    OK overall but I feel this lacks a definition of what a virtqueue number
    is in some transport and device independent place.
    Maybe in the virtqueues chapter?
    Just "
    Each virtqueue is identified by a 0 based virtqueue number. Thus
    virtqueues are numbered 0,1,2 and so on.
    "

    will do.

    > ---
    > changelog:
    > v1->v2:
    > - added patches for virtio net for rss area
    > - added patches for covering ccw transport
    > - added missing entries to refer in mmio transport
    >
    > Parav Pandit (7):
    > transport-pci: Refer to the vq by its number
    > transport-mmio: Rename QueueNum register
    > transport-mmio: Refer to the vq by its number
    > transport-ccw: Rename queue depth/size to other transports
    > transport-ccw: Refer to the vq by its number
    > virtio-net: Avoid duplicate receive queue example
    > virtio-net: Describe RSS using receive queue handle
    >
    > device-types/net/description.tex | 26 +++++++++++----
    > transport-ccw.tex | 39 +++++++++++++++-------
    > transport-mmio.tex | 56 +++++++++++++++++++-------------
    > transport-pci.tex | 6 ++--
    > 4 files changed, 84 insertions(+), 43 deletions(-)
    >
    > --
    > 2.26.2




  • 27.  Re: [PATCH v2 0/7] Rename queue index to queue number

    Posted 03-21-2023 09:06
    On Tue, Mar 21, 2023 at 06:10:29AM +0200, Parav Pandit wrote:
    > 1. Currently, virtqueue is identified between driver and device
    > interchangeably using either number of index terminology.
    >
    > 2. Between PCI and MMIO transport the queue size (depth) is
    > defined as queue_size and QueueNum respectively.
    >
    > To avoid confusion and to have consistency, unify them to use as Number.
    >
    > Solution:
    > a. Use virtqueue number description, and rename MMIO register as QueueSize.
    > b. Replace virtqueue index to virtqueue number
    > c. RSS area of virtio net has inherited some logic, describe it
    > using abstract rq_handle.
    >
    > Patch summary:
    > patch-1 renames index to number for pci transport
    > patch-2 renames mmio register from Num to Size
    > patch-3 renames index to number for mmio transport
    > patch-4 renames num field to size for ccw transport
    > patch-5 renames index field to queue_select for ccw transport
    > patch-6 for virtio-net removes duplicate example from requirements
    > patch-7 for virtio-net updates rss description to use vq number
    >
    > This series only improves the documentation, it does not change any
    > transport or device functionality.
    >
    > Please review.
    > This series fixes the issue [1].
    >
    > [1] https://github.com/oasis-tcs/virtio-spec/issues/163

    OK overall but I feel this lacks a definition of what a virtqueue number
    is in some transport and device independent place.
    Maybe in the virtqueues chapter?
    Just "
    Each virtqueue is identified by a 0 based virtqueue number. Thus
    virtqueues are numbered 0,1,2 and so on.
    "

    will do.

    > ---
    > changelog:
    > v1->v2:
    > - added patches for virtio net for rss area
    > - added patches for covering ccw transport
    > - added missing entries to refer in mmio transport
    >
    > Parav Pandit (7):
    > transport-pci: Refer to the vq by its number
    > transport-mmio: Rename QueueNum register
    > transport-mmio: Refer to the vq by its number
    > transport-ccw: Rename queue depth/size to other transports
    > transport-ccw: Refer to the vq by its number
    > virtio-net: Avoid duplicate receive queue example
    > virtio-net: Describe RSS using receive queue handle
    >
    > device-types/net/description.tex | 26 +++++++++++----
    > transport-ccw.tex | 39 +++++++++++++++-------
    > transport-mmio.tex | 56 +++++++++++++++++++-------------
    > transport-pci.tex | 6 ++--
    > 4 files changed, 84 insertions(+), 43 deletions(-)
    >
    > --
    > 2.26.2




  • 28.  RE: [PATCH v2 0/7] Rename queue index to queue number

    Posted 03-21-2023 20:58
    > From: Michael S. Tsirkin <mst@redhat.com>
    > Sent: Tuesday, March 21, 2023 5:06 AM

    [..]
    > > [1] https://github.com/oasis-tcs/virtio-spec/issues/163
    >
    > OK overall but I feel this lacks a definition of what a virtqueue number is in
    > some transport and device independent place.
    > Maybe in the virtqueues chapter?
    > Just "
    > Each virtqueue is identified by a 0 based virtqueue number. Thus virtqueues are
    > numbered 0,1,2 and so on.
    > "
    >
    > will do.

    Ok. will do in v3 along with ccw change.
    Thanks.



  • 29.  RE: [PATCH v2 0/7] Rename queue index to queue number

    Posted 03-21-2023 20:58
    > From: Michael S. Tsirkin <mst@redhat.com>
    > Sent: Tuesday, March 21, 2023 5:06 AM

    [..]
    > > [1] https://github.com/oasis-tcs/virtio-spec/issues/163
    >
    > OK overall but I feel this lacks a definition of what a virtqueue number is in
    > some transport and device independent place.
    > Maybe in the virtqueues chapter?
    > Just "
    > Each virtqueue is identified by a 0 based virtqueue number. Thus virtqueues are
    > numbered 0,1,2 and so on.
    > "
    >
    > will do.

    Ok. will do in v3 along with ccw change.
    Thanks.