Thread (3 messages) 3 messages, 3 authors, 2012-05-07

Re: virtio message framing

From: Rusty Russell <hidden>
Date: 2012-05-07 03:12:15

On Fri, 13 Apr 2012 10:48:18 -0500, Anthony Liguori [off-list ref] wrote:
On 04/13/2012 09:50 AM, Stefan Hajnoczi wrote:
quoted
The virtio specification says:

"The descriptors used for a buffer should not effect the semantics
of the message,
except for the total length of the buffer"

and

"In particular, no implementation should use the descriptor boundaries
to determine the size of any header in a request"
This was the noble intention but all of the implementations actually rely on 
boundary sizes.

Both QEMU and lguest rely on boundary sizes.  We've removed some of it in 
virtio-net in QEMU but it still looks like it's there for virtio-blk.
I will fix lguest.  It's a poor excuse to say that lguest doens't have
an ABI, so it can take these shortcuts; it's also the exemplar.
kvm tool also makes this assumption.
quoted
Why should descriptor layout not be specified?

It seems that implementing arbitrary descriptor layout support (e.g.
1-byte descriptors) requires more code and makes input validation
harder.

Why bother with the flexibility of unspecified descriptor layouts?  As
long as the layout is specified clearly it makes everyone's lives
easier to use a strict descriptor layout.
I hate to just change the spec here but I don't see a better option.
For example, in the net code, we could often pack the virtio_net header
into the skb and save a descriptor.

We didn't do this because it would break qemu.

Added to TODO list: a new DEBUG config option which breaks up virtio
descriptors.

Thanks,
Rusty.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help