From: "Michael S. Tsirkin" <mst@redhat.com>
To: "Liang, Cunming" <cunming.liang@intel.com>
Cc: "virtio-dev@lists.oasis-open.org"
<virtio-dev@lists.oasis-open.org>,
"Steven Luong (sluong)" <sluong@cisco.com>,
"virtualization@lists.linux-foundation.org"
<virtualization@lists.linux-foundation.org>
Subject: Re: [virtio-dev] packed ring layout proposal v3
Date: Sun, 1 Oct 2017 07:08:29 +0300 [thread overview]
Message-ID: <20171001063817-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <D0158A423229094DA7ABF71CF2FA0DA34E1AD49B@SHSMSX152.ccr.corp.intel.com>
On Thu, Sep 28, 2017 at 09:44:35AM +0000, Liang, Cunming wrote:
>
> Get it now. Please correct me if I missing something.
>
>
> Flags status hints,
>
> - DESC_DRIVER only: driver owns the descriptor w/o available info ready for device to use
>
> - DESC_DRIVER | DESC_WRAP: driver has prepared an available descriptor, device hasn't used it yet
>
> - None: device has used the descriptor, and write descriptor out
>
> - DESC_WRAP only: shall not happen, device make sure to clear it
>
>
> Polling behavior is,
>
> - Device monitor DESC_WRAP bit set or not; If set, go to use descriptor and clear DESC_DRIVER bit in the end (note: always need to clear DESC_WRAP)
>
> - Driver monitor DESC_DRIVER bit cleared or not; If cleared, reclaim descriptor(set DESC_DRIVER) and set DESC_WRAP once new available descriptor get ready to go
>
>
> --
> Steve
Hmm no, not what I had in mind.
DESC_DRIVER: used by driver to poll. Driver sets it when writing a
descriptor. Device clears it when overwriting a descriptor.
Thus driver uses DESC_DRIVER to detect that device data in
descriptor is valid.
DESC_WRAP: used by device to poll. Driver sets it to a *different*
value every time it overwrites a descriptor. How to achieve it?
since descriptors are written out in ring order,
simply maintain the current value internally (start value 1) and flip it
every time you overwrite the first descriptor.
Device leaves it intact when overwriting a descriptor.
After writing down this explanation, I think the names aren't
great.
Let me try an alternative explanation.
---------------
A two-bit field, DRIVER_OWNER, signals the buffer ownership.
It has 4 possible values:
values 0x1, 0x11 are written by driver
values 0x0, 0x10 are written by device
each time driver writes out a descriptor, it must make sure
that the high bit in OWNER changes.
each time device writes out a descriptor, it must make sure
that the high bit in OWNER does not change.
this is exactly the same functionally, DRIVER is high bit and
WRAP is the low bit. Does this make things clearer?
---------------
Maybe the difference between device and driver
is confusing. We can fix that by changing the values.
Here is an alternative. Let me know if you like it better -
I need to think a bit more to make sure it works,
but to give you an idea:
---------------
A two-bit field, DRIVER_OWNER, signals the buffer ownership.
It has 4 possible values:
values 0x1, 0x10 are written by driver
values 0x0, 0x11 are written by device
each time driver writes out a descriptor, it must make sure
that the high bit in OWNER changes. Thus first time
it writes 0x10, next time 0x1, then 0x10 again.
each time device writes out a descriptor, it must make sure
that the low bit in OWNER changes. Thus first time
it writes 0x11, next time 0x0, then 0x11 again.
---------------
> > -----Original Message-----
> > From: Michael S. Tsirkin [mailto:mst@redhat.com]
> > Sent: Thursday, September 28, 2017 7:49 AM
> > To: Steven Luong (sluong)
> > Cc: Liang, Cunming; virtio-dev@lists.oasis-open.org;
> > virtualization@lists.linux-foundation.org
> > Subject: Re: [virtio-dev] packed ring layout proposal v3
> >
> > On Tue, Sep 26, 2017 at 11:38:18PM +0000, Steven Luong (sluong) wrote:
> > > Michael,
> > >
> > > Would you please give an example or two how these two flags
> > DESC_DRIVER and DESC_WRAP are used together? Like others, I am
> > confused by the description and still don’t quite grok it.
> > >
> > > Steven
> >
> > My bad, I will need to work on it. Here is an example:
> >
> > Let's assume device promised to consume packets in order
> >
> > ring size = 2
> >
> > Ring is 0 initialized.
> >
> > Device initially polls DESC[0].flags for WRAP bit to change.
> >
> > driver adds:
> >
> > DESC[0].addr = 1234
> > DESC[0].id = 0
> > DESC[0].flags = DESC_DRIVER | DESC_NEXT | DESC_WRAP
> >
> > and
> >
> > DESC[0].addr = 5678
> > DESC[1].id = 1
> > DESC[1].flags = DESC_DRIVER | DESC_WRAP
> >
> >
> > it now starts polling DESC[0] flags.
> >
> >
> > Device reads 1234, executes it, does not use it.
> >
> > Device reads 5678, executes it, and uses it:
> >
> > DESC[0].id = 1
> > DESC[0].flags = 0
> >
> > Device now polls DESC[0].flags for WRAP bit to change.
> >
> > Now driver sees that DRIVER bit has been cleared, so it nows that id is valid. I
> > sees id 1, therefore id 0 and 1 has been read and are safe to overwrite.
> >
> > So it writes it out. It wrapped around to beginning of ring, so it flips the
> > WRAP bit to 0 on all descriptors now:
> >
> > DESC[0].addr = 9ABC
> > DESC[0].id = 0
> > DESC[0].flags = DESC_DRIVER | DESC_NEXT
> >
> >
> > DESC[0].addr = DEF0
> > DESC[0].id = 1
> > DESC[0].flags = DESC_DRIVER
> >
> >
> > Next round wrap will be 1 again.
> >
> >
> > To summarise:
> >
> > DRIVER bit is used by driver to detect device has used one or more
> > descriptors. WRAP is is used by device to detect driver has made a new
> > descriptor available.
> >
> >
> > --
> > MST
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
next prev parent reply other threads:[~2017-10-01 4:08 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20160915223915.qjlnlvf2w7u37bu3@redhat.com>
2017-02-08 13:37 ` packed ring layout proposal v2 Christian Borntraeger
2017-02-09 17:43 ` Michael S. Tsirkin
[not found] ` <20170209181955-mutt-send-email-mst@kernel.org>
2017-02-09 18:27 ` Christian Borntraeger
2017-02-08 17:41 ` [virtio-dev] " Paolo Bonzini
2017-02-08 19:59 ` Michael S. Tsirkin
[not found] ` <20170208214435-mutt-send-email-mst@kernel.org>
2017-02-09 15:48 ` Paolo Bonzini
2017-02-09 16:11 ` Cornelia Huck
2017-02-09 18:24 ` Michael S. Tsirkin
[not found] ` <20170209202203-mutt-send-email-mst@kernel.org>
2017-02-10 11:32 ` Paolo Bonzini
[not found] ` <c229269b-1702-ffec-62e8-002c7c142904@redhat.com>
2017-02-10 15:20 ` Michael S. Tsirkin
2017-02-10 16:17 ` Paolo Bonzini
[not found] ` <20170209171105.075a9d9c.cornelia.huck@de.ibm.com>
2017-02-22 16:43 ` Michael S. Tsirkin
[not found] ` <20170222181333-mutt-send-email-mst@kernel.org>
2017-03-07 15:53 ` Cornelia Huck
2017-03-07 20:33 ` Michael S. Tsirkin
[not found] ` <20170307223057-mutt-send-email-mst@kernel.org>
2017-07-10 16:27 ` Amnon Ilan
2017-02-22 4:27 ` packed ring layout proposal - todo list Michael S. Tsirkin
2017-02-22 14:46 ` [virtio-dev] packed ring layout proposal v2 Chien, Roger S
[not found] ` <20170222054336-mutt-send-email-mst@kernel.org>
2017-02-22 9:19 ` [virtio-dev] packed ring layout proposal - todo list Gray, Mark D
[not found] ` <738D45BC1F695740A983F43CFE1B7EA94E93CA7E@IRSMSX108.ger.corp.intel.com>
2017-02-22 15:13 ` Michael S. Tsirkin
2017-02-28 4:29 ` Yuanhan Liu
[not found] ` <20170228042943.GH18844@yliu-dev.sh.intel.com>
2017-03-01 1:07 ` Michael S. Tsirkin
2017-03-08 7:09 ` Yuanhan Liu
[not found] ` <20170308070948.GC18844@yliu-dev.sh.intel.com>
2017-03-08 7:56 ` Yuanhan Liu
[not found] ` <20170308075624.GF18844@yliu-dev.sh.intel.com>
2017-03-29 12:39 ` Michael S. Tsirkin
2017-04-01 7:30 ` Yuanhan Liu
2017-02-28 5:02 ` [virtio-dev] packed ring layout proposal v2 Yuanhan Liu
2017-02-28 5:47 ` [RFC] packed (virtio-net) headers Yuanhan Liu
[not found] ` <20170228050218.GI18844@yliu-dev.sh.intel.com>
2017-03-01 1:02 ` [virtio-dev] packed ring layout proposal v2 Michael S. Tsirkin
[not found] ` <20170301024951-mutt-send-email-mst@kernel.org>
2017-03-01 3:57 ` Yuanhan Liu
[not found] ` <20170301035715.GP18844@yliu-dev.sh.intel.com>
2017-03-01 4:14 ` Michael S. Tsirkin
2017-03-01 4:57 ` Yuanhan Liu
[not found] ` <20170228054719.GJ18844@yliu-dev.sh.intel.com>
2017-03-01 1:28 ` [RFC] packed (virtio-net) headers Michael S. Tsirkin
2017-07-16 6:00 ` [virtio-dev] packed ring layout proposal v2 Lior Narkis
[not found] ` <DB5PR05MB176690DF180908ABCDDA0860D3A30@DB5PR05MB1766.eurprd05.prod.outlook.com>
2017-07-18 16:23 ` Michael S. Tsirkin
2017-07-19 7:41 ` Lior Narkis
[not found] ` <DB5PR05MB1766461893DB3FE20D338B96D3A60@DB5PR05MB1766.eurprd05.prod.outlook.com>
2017-07-20 13:06 ` Michael S. Tsirkin
2017-09-11 7:47 ` packed ring layout proposal v3 Jason Wang
2017-09-12 16:20 ` [virtio-dev] " Willem de Bruijn
[not found] ` <0f0e1b94-2a46-689c-dbb3-0d578cc8df33@redhat.com>
2017-09-12 16:23 ` [virtio-dev] " Willem de Bruijn
[not found] ` <CAF=yD-+LtZO=Fcw6Y-v0dnxkmwqW1+CqzopyQEApOjOAszgqMg@mail.gmail.com>
2017-09-13 1:26 ` Jason Wang
2017-09-14 8:23 ` Ilya Lesokhin
2017-09-20 9:11 ` [virtio-dev] " Liang, Cunming
2017-09-25 22:24 ` Michael S. Tsirkin
[not found] ` <20170926011826-mutt-send-email-mst@kernel.org>
2017-09-26 23:38 ` Steven Luong (sluong)
[not found] ` <7A0DC0C9-F148-4161-B2D1-8D8D14D8B9A1@cisco.com>
2017-09-27 23:49 ` Michael S. Tsirkin
2017-09-28 9:44 ` Liang, Cunming
2017-09-28 21:13 ` Michael S. Tsirkin
[not found] ` <D0158A423229094DA7ABF71CF2FA0DA34E1AD49B@SHSMSX152.ccr.corp.intel.com>
2017-10-01 4:08 ` Michael S. Tsirkin [this message]
2017-10-04 12:39 ` Jens Freimann
2017-10-04 12:58 ` Michael S. Tsirkin
[not found] ` <20171004155532-mutt-send-email-mst@kernel.org>
2017-10-10 9:56 ` Liang, Cunming
[not found] ` <D0158A423229094DA7ABF71CF2FA0DA34E7DE4D3@SHSMSX104.ccr.corp.intel.com>
2017-10-11 12:22 ` Jens Freimann
2017-09-21 13:36 ` Liang, Cunming
2017-09-28 21:27 ` Michael S. Tsirkin
2017-10-08 6:16 ` Ilya Lesokhin
[not found] ` <AM4PR0501MB27236B71E1B02176F1844ACBD4770@AM4PR0501MB2723.eurprd05.prod.outlook.com>
2017-10-25 16:20 ` Michael S. Tsirkin
2017-10-29 9:05 ` Ilya Lesokhin
[not found] ` <AM4PR0501MB2723177BF4E5EE32CC878E8CD4580@AM4PR0501MB2723.eurprd05.prod.outlook.com>
2017-10-29 14:21 ` Michael S. Tsirkin
2017-10-29 14:34 ` Ilya Lesokhin
[not found] ` <AM4PR0501MB272332C92A384C97D6975D8DD4580@AM4PR0501MB2723.eurprd05.prod.outlook.com>
2017-10-30 2:08 ` Michael S. Tsirkin
2017-10-30 6:30 ` Ilya Lesokhin
[not found] ` <AM4PR0501MB27233D93937CA1F2E5AD13DBD4590@AM4PR0501MB2723.eurprd05.prod.outlook.com>
2017-10-30 16:30 ` Michael S. Tsirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171001063817-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=cunming.liang@intel.com \
--cc=sluong@cisco.com \
--cc=virtio-dev@lists.oasis-open.org \
--cc=virtualization@lists.linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).