On 18.01.2011, at 13:35, Kevin Wolf wrote: > Am 20.12.2010 22:13, schrieb Alexander Graf: >> The DMA helpers incur additional overhead on data transfers. I'm not >> sure we need the additional complexity provided by them. So let's just >> use qiovs directly when running in the fast path (ncq). >> >> Signed-off-by: Alexander Graf <ag...@suse.de> >> --- >> hw/ide/ahci.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- >> hw/ide/ahci.h | 3 ++ >> 2 files changed, 95 insertions(+), 8 deletions(-) > > I don't feel comfortable with this one, and I think a while ago we > discussed on IRC why the DMA helpers even exist. If AHCI doesn't need > them, probably nobody needed them. > > However, I'm inclined to think that AHCI actually _does_ need them in > corner cases, even though it might not break in all the common cases > that you have tested. Can you explain why only AHCI doesn't need it or > is it just "didn't break for me in practice"? >
It's the latter. > Where does the overhead in the DMA helpers come from? Can we optimize > this code instead of making the device emulation less correct? Well, dma helpers involve another malloc which is probably the biggest hog. I frankly don't see the point in making it correct for the fast path though. I'd rather like to have a fast block emulation that works with all OSs than an accurate one that emulates something nobody cares about. Virtio for example doesn't use dma helpers either - they just claim it's not defined in the spec. So if virtio-blk gets away with it, it means that all OSs should never make use of the additional complexity. Alex