Hi, this is the version of SCSI scatter/gather based on the existing DMA helpers infrastructure.
The infrastructure required a little update because I need to know the residual amount of data upon short transfers. To this end, my choice was to make QEMUSGList mutable and track the current position in there. Any other ideas are welcome, the reason for this choice is explained in patch 2. The patches are quite self-contained, but they depend on the changes I posted yesterday. Patch 11 is the sample vmw_pvscsi device model that I used to test the code. Paolo Bonzini (11): dma-helpers: allow including from target-independent code dma-helpers: track position in the QEMUSGList dma-helpers: rewrite completion/cancellation dma-helpers: prepare for adding dma_buf_* functions dma-helpers: add dma_buf_read and dma_buf_write scsi: pass residual amount to command_complete scsi: add scatter/gather functionality scsi-disk: commonize iovec creation between reads and writes scsi-disk: lazily allocate bounce buffer scsi-disk: enable scatter/gather functionality sample pvscsi driver with s/g support Makefile.objs | 1 + cutils.c | 8 +- default-configs/i386-softmmu.mak | 1 + default-configs/pci.mak | 1 + default-configs/x86_64-softmmu.mak | 1 + dma-helpers.c | 231 +++++++-- dma.h | 27 +- hw/esp.c | 5 +- hw/lsi53c895a.c | 4 +- hw/pci.h | 1 + hw/scsi-bus.c | 38 ++- hw/scsi-disk.c | 117 +++-- hw/scsi.h | 7 +- hw/spapr_vscsi.c | 4 +- hw/usb-msd.c | 4 +- hw/vmw_pvscsi.c | 904 ++++++++++++++++++++++++++++++++++++ hw/vmw_pvscsi.h | 389 ++++++++++++++++ qemu-common.h | 1 + trace-events | 15 + 19 files changed, 1646 insertions(+), 113 deletions(-) create mode 100644 hw/vmw_pvscsi.c create mode 100644 hw/vmw_pvscsi.h -- 1.7.6