Thread (30 messages) 30 messages, 6 authors, 2013-02-06

Re: [PATCH v2 1/5] virtio: add functions for piecewise addition of buffers

From: Rusty Russell <hidden>
Date: 2013-01-07 01:17:26
Also in: kvm, linux-scsi, lkml

Paolo Bonzini [off-list ref] writes:
Il 02/01/2013 06:03, Rusty Russell ha scritto:
quoted
Paolo Bonzini [off-list ref] writes:
quoted
The virtqueue_add_buf function has two limitations:

1) it requires the caller to provide all the buffers in a single call;

2) it does not support chained scatterlists: the buffers must be
provided as an array of struct scatterlist;
Chained scatterlists are a horrible interface, but that doesn't mean we
shouldn't support them if there's a need.

I think I once even had a patch which passed two chained sgs, rather
than a combo sg and two length numbers.  It's very old, but I've pasted
it below.

Duplicating the implementation by having another interface is pretty
nasty; I think I'd prefer the chained scatterlists, if that's optimal
for you.
Unfortunately, that cannot work because not all architectures support
chained scatterlists.
WHAT?  I can't figure out what an arch needs to do to support this?  Why
is it an option for archs?  Why is sg_chain() even defined for
non-ARCH_HAS_SG_CHAIN?

Jens, help!!

All archs we care about support them, though, so I think we can ignore
this issue for now.
(Also, as you mention chained scatterlists are horrible.  They'd happen
to work for virtio-scsi, but not for virtio-blk where the response
status is part of the footer, not the header).
We lost that debate 5 years ago, so we hack around it as needed.  We can
add helpers to append if we need.

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