From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60852) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b4pNI-0007w1-NY for qemu-devel@nongnu.org; Mon, 23 May 2016 08:54:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1b4pNG-0005I0-Ns for qemu-devel@nongnu.org; Mon, 23 May 2016 08:54:23 -0400 From: Paolo Bonzini Date: Mon, 23 May 2016 14:54:04 +0200 Message-Id: <1464008051-6429-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH v2 0/7] dma-helpers, scsi-block: use SG_IO for all I/O on scsi-block List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org scsi-block uses the block layer for reads and writes in order to avoid allocating bounce buffers as big as the transferred data. We know how to split a large transfer to multiple reads and writes, and thus we can use scsi-disk.c's existing code to do I/O in multiple chunks (for non-s/g SCSI hosts) or through the DMA helpers (for s/g SCSI hosts). Unfortunately, this has the side effect of eating the SCSI status except in the very few cases where we can convert an errno code back to a SCSI status. It puts a big wrench in persistent reservations support in the guest, for example. Luckily, splitting a large transfer into multiple SBC commands is just as easy, and this is what the last patch does. It takes the original CDB, patches in a modified starting sector and sector count, and executes the SCSI command through blk_aio_ioctl. It is also easy to pass a QEMUIOVector to SG_IO, so that s/g SCSI hosts keep the performance. This rebases the patches on top of Eric's changes for byte-based BlockBackend access and fixes a few bugs I knew about in the RFC. Patches 1, 5 and 6 are new. Paolo Paolo Bonzini (7): dma-helpers: change interface to byte-based dma-helpers: change BlockBackend to opaque value in DMAIOFunc scsi-disk: introduce a common base class scsi-disk: introduce dma_readv and dma_writev scsi-disk: add need_fua_emulation to SCSIDiskClass scsi-disk: introduce scsi_disk_req_check_error scsi-block: always use SG_IO dma-helpers.c | 54 +++++-- hw/block/nvme.c | 6 +- hw/ide/ahci.c | 6 +- hw/ide/core.c | 20 ++- hw/ide/internal.h | 6 +- hw/ide/macio.c | 2 +- hw/scsi/scsi-disk.c | 409 +++++++++++++++++++++++++++++++++++++-------------- include/sysemu/dma.h | 20 +-- trace-events | 2 +- 9 files changed, 371 insertions(+), 154 deletions(-) -- 2.5.5