[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [PATCH v3 4/4] Add CCW configuration field "indirect_num"
On Wed, Mar 16 2022, Christian Schoenebeck <qemu_oss@crudebyte.com> wrote: > This new CCW configuration field allows to negotiate a more fine > graded maximum lenght of indirect descriptor chains. > > Bump CCW virtio revision to 3 and make the existence of this new > field "indirect_num" dependant on revision 3. > > Fixes: https://github.com/oasis-tcs/virtio-spec/issues/122 > Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com> > --- > content.tex | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > (...) > @@ -2581,12 +2583,17 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir > struct vq_config_block { > be16 index; > be16 max_num; > + be32 indirect_num; /* since virtio-ccw rev. 3 */ Maybe make it max_indirect_num (to mirror max_num?) > }; > \end{lstlisting} > > The requested number of buffers for queue \field{index} is returned in > \field{max_num}. > > +Since revision 3, \field{indirect_num} exists, which is supposed to reflect the > +Queue Indirect Size (i.e. the maximum length of indirect descriptor tables) > +supported by device for this queue. It still depends on the feature flag, though. Maybe "If revision 2 or lower is set, struct vq_config_block extends up to \field{max_num}. If revision 3 or higher is set, struct vq_config_block extends to \field{max_indirect_num}. If VIRTIO_RING_F_INDIRECT_SIZE is negotiated, \field{indirect_max_num} contains the maximum Queue Indirect Size (i.e. the maximum length of indirect descriptor tables) supported by the device for this queue; otherwise, its contents are unpredictable." > + > Afterwards, CCW_CMD_SET_VQ is issued by the driver to inform the > device about the location used for its queue. The transmitted > structure is > @@ -2599,6 +2606,7 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir > be16 num; > be64 driver; > be64 device; > + be32 indirect_num; /* since virtio-ccw rev. 3 */ > }; > \end{lstlisting} > > @@ -2607,6 +2615,10 @@ \subsubsection{Configuring a Virtqueue}\label{sec:Virtio Transport Options / Vir > available area and used area for queue \field{index}, respectively. The actual > virtqueue size (number of allocated buffers) is transmitted in \field{num}. > > +Since revision 3, \field{indirect_num} exists, which is supposed to reflect the > +Queue Indirect Size (i.e. the maximum length of indirect descriptor tables) > +supported by driver for this queue. Similar to above: "If revision 2 or lower is set, struct vq_info_block extends up to \field{device}. If revision 3 or higher is set, struct vq_info_block extends to \field{indirect_num}. If VIRTIO_RING_F_INDIRECT_SIZE is negotiated, the Queue Indirect Size (i.e. the maximum length of indirect descriptor tables) supported by the driver for this queue is transmitted in \field{indirect_num}." > + > \devicenormative{\paragraph}{Configuring a Virtqueue}{Virtio Transport Options / Virtio over channel I/O / Device Initialization / Configuring a Virtqueue} > > \field{res0} is reserved and MUST be ignored by the device. We should include a device normative statement: "The device MUST NOT offer VIRTIO_RING_F_INDIRECT_SIZE, unless at least revision 3 is set, and therefore \field{max_indirect_num} respectively \field{indirect_num} are available."
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]