On Wed, Sep 20, 2017 at 09:11:57AM +0000, Liang, Cunming wrote: > Hi Michael, > > > -----Original Message----- > > From: virtio-dev@lists.oasis-open.org > > [mailto:virtio-dev@lists.oasis-open.org] > > On Behalf Of Michael S. Tsirkin > > Sent: Sunday, September 10, 2017 1:06 PM > > To: virtio-dev@lists.oasis-open.org > > Cc: virtualizat...@lists.linux-foundation.org > > Subject: [virtio-dev] packed ring layout proposal v3 > > > [...] > > * Descriptor ring: > > > > Driver writes descriptors with unique index values and DESC_DRIVER set in > > flags. > > Descriptors are written in a ring order: from start to end of ring, wrapping > > around to the beginning. > > Device writes used descriptors with correct len, index, and DESC_HW clear. > > Again descriptors are written in ring order. This might not be the same > > order > > of driver descriptors, and not all descriptors have to be written out. > > > > Driver and device are expected to maintain (internally) a wrap-around bit, > > starting at 0 and changing value each time they start writing out > > descriptors > > at the beginning of the ring. This bit is passed as DESC_WRAP bit in the > > flags > > field. > > One simple question there, trying to understand the usage of DESC_WRAP flag. > > DESC_WRAP bit is a new flag since v2. It's used to address 'non power-of-2 > ring sizes' mentioned in v2? > > Being confused by the statement of wrap-around bit here, it's an internal > wrap-around counter represented by single bit (0/1)? > DESC_WRAP can appear on any descriptor entry in the ring, why it highlights > changing value at the beginning of the ring?
No, this is necessary if not all descriptors are overwritten by device after they are used. Each time driver overwrites a descriptor, the value in DESC_WRAP changes which makes it possible for device to detect that there's a new descriptor. > > > > Flags are always set/cleared last. > > > > Note that driver can write descriptors out in any order, but device will not > > execute descriptor X+1 until descriptor X has been read as valid. > > > > Driver operation: > > > [...] > > > > DESC_WRAP - device uses this field to detect descriptor change by driver. > > Device uses this field to detect change of wrap-around boundary by driver? > > [...] > > > > Device operation (using descriptors): > > > [...] > > > > DESC_WRAP - driver uses this field to detect descriptor change by device. > > Driver uses this field to detect change of wrap-around boundary by device? > > By using this, driver doesn't need to maintain any internal wrap-around > count, but being aware of wrap-around by DESC_WRAP flag. > > > Thanks, > Steve So v2 simply said descriptor has a single bit: driver writes 1 there, device writes 0. This requires device to overwrite each descriptor and people asked for a way to communicate where some descriptors are not overwritten. This new bit helps device distinguish new and old descriptors written by driver. > > > [...] > > > > --- > > > > Note: should this proposal be accepted and approved, one or more > > claims disclosed to the TC admin and listed on the Virtio TC > > IPR page https://www.oasis-open.org/committees/virtio/ipr.php > > might become Essential Claims. > > Note: the page above is unfortunately out of date and out of > > my hands. I'm in the process of updating ipr disclosures > > in github instead. Will make sure all is in place before > > this proposal is put to vote. As usual this TC operates under the > > Non-Assertion Mode of the OASIS IPR Policy, which protects > > anyone implementing the virtio spec. > > > > -- > > MST > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: virtio-dev-unsubscr...@lists.oasis-open.org > > For additional commands, e-mail: virtio-dev-h...@lists.oasis-open.org --------------------------------------------------------------------- To unsubscribe, e-mail: virtio-dev-unsubscr...@lists.oasis-open.org For additional commands, e-mail: virtio-dev-h...@lists.oasis-open.org