Re: [PATCH v2 1/5] virtio: add functions for piecewise addition of buffers
From: Paolo Bonzini <pbonzini@redhat.com>
Date: 2013-01-07 14:28:00
Also in:
kvm, linux-scsi, lkml
Il 07/01/2013 01:02, Rusty Russell ha scritto:
Paolo Bonzini [off-list ref] writes:quoted
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?
It needs to use the iterator functions in its DMA driver.
All archs we care about support them, though, so I think we can ignore this issue for now.
Kind of... In principle all QEMU-supported arches can use virtio, and the speedup can be quite useful. And there is no Kconfig symbol for SG chains that I can use to disable virtio-scsi on unsupported arches. :/ Paolo
quoted
(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.