[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [PATCH] virtio-ccw: split descriptor/available/used rings (alternate)
On Wed, Oct 09, 2013 at 05:59:36PM +0200, Cornelia Huck wrote: > Extend vq_info_block so that the addresses for descriptor table, > available ring and used ring may be transmitted independently. > > Depending upon the selected revision, post a command reject instead > of a channel program check if the driver uses the legacy format > and length checks are suppressed. > > VIRTIO-23 > > Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> > > --- > > This is an alternate approach, extending the exiting structure instead > of creating a different layout. I'm not 100% sure whether doing a > command reject instead of a channel program check in case of a short > buffer is the right approach, though. Doing a channel program check > would probably cover that error just as well, and we could resolve > VIRTIO-23 independently of VIRTIO-42. > --- > virtio-v1.0-wd01-part1-specification.txt | 32 +++++++++++++++++++++++++++--- > 1 file changed, 29 insertions(+), 3 deletions(-) > > diff --git a/virtio-v1.0-wd01-part1-specification.txt b/virtio-v1.0-wd01-part1-specification.txt > index ae646db..baff12f 100644 > --- a/virtio-v1.0-wd01-part1-specification.txt > +++ b/virtio-v1.0-wd01-part1-specification.txt > @@ -1642,15 +1642,41 @@ host about the location used for its queue. The transmitted > structure is > > struct vq_info_block { > + __u64 desc; > + __u32 res0; > + __u16 index; > + __u16 num; > + __u64 avail; > + __u64 used; > +} __attribute__ ((packed)); > + > +desc, avail and used contain the guest addresses for the descriptor table, > +available ring and used ring for queue index, respectively. The actual > +virtqueue size (number of allocated buffers) is transmitted in num. > +res0 is reserved and must contain 0; otherwise, the device MUST post a > +unit check with command reject. > + > +If the revision selected by the driver is at least 1, Where's the revision field and how does driver select it? I don't see it anywhere in spec? > the device MUST > +post a unit check with command reject if the transmitted data is between > +16 and 31 bytes if the driver suppressed incorrect length indication > +for the channel command. Otherwise, the normal conditions for handling > +incorrect data lenghts apply. > + > +2.3.3.2.2.1. Legacy Interface: A Note on Configuring a Virtqueue > +---------------------------------------------------------------- > + > +For a legacy driver or for a driver that selected revision 0, > +CCW_CMD_SET_VQ uses the following communication block: > + > +struct vq_info_block_legacy { > __u64 queue; > __u32 align; > __u16 index; > __u16 num; > } __attribute__ ((packed)); > > -queue contains the guest address for queue index. The actual > -number of allocated buffers is transmitted in num and their > -alignment in align. > +queue contains the guest address for queue index, num the number of buffers > +and align the alignment. > > 100.3.3.2.2. Virtqueue Layout > ------------------------------ > -- > 1.7.9.5
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]