[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [virtio-comment] [PATCH v14 04/11] transport-pci: Avoid first vq index reference
On Wed, 19 Apr 2023 04:46:32 +0300 Parav Pandit <parav@nvidia.com> wrote: > Drop reference to first virtqueue as it is already > covered now by the generic section in first patch. > TL;DR: Acked-by: Halil Pasic <pasic@linux.ibm.com> Rationale: --------- I agree, what a virtqueue index is should be described in a single place instead all over the place. And further improvements can be done on top of this series. Discussion: ----------- Is it indeed covered now by the generic section in first patch? In [1] you state the following: "There is nothing like a zero based index. A VQ can be any u16 _number_ in range of 0 to 65534. Number can also start from zero. So zero based index = zero based number." I don't really understand what do you mean by this, but I'm afraid it is not consistent with my understanding. Can not be any number in range of 0 to 65534. Rather in general it depends on the device type, and on the device how many queues it support. Let us call this number dev_vq_max. And if dev_vq_max > N > 0 index is associated with a queue the N-1 index is also associated with a queue. Let me also note that the number of queues supported/provided by the device is a matter of the device. For many devices the number of queues is a constant given in the specification. A Network Device tells its driver how may queues it supports via max_virtqueue_pairs, Crypto Device via max_dataqueues, and Console Device via max_dataqueues. The transports PCI also has num_queues which is documented as "The device specifies the maximum number of virtqueues supported here." while CCW and MMIO have no transport specific means to tell the driver about the number of queues supported by the device. In any case, if the number of queues provided by the device is N, each of those queues is uniquely identified by exactly one index from the range [0..N-1]. Furthermore the role a certain queue plays is determined by its index. E.g. for the Console Device virtqueue identified by the index 3 is the "control receiveq". [1] d62d2090-de0d-0ea6-5c85-ecf19ae828c7@nvidia.com/">https://lore.kernel.org/virtio-comment/d62d2090-de0d-0ea6-5c85-ecf19ae828c7@nvidia.com/ [..] > > \begin{enumerate} > -\item Write the virtqueue index (first queue is 0) to \field{queue_select}. > +\item Write the virtqueue index 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.
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]