This series is only a rebase (onto scsi-next^14) and resend, because one updated patch was overlooked in v3 by me, as a result Paolo's scsi-next branch is broken:
qemu-system-x86_64: /home/fam/qemu/hw/scsi/virtio-scsi.c:74: virtio_scsi_complete_req: Assertion `req->vq == ((void *)0)' failed. Because of the bad placement of vring field in VirtIOSCSIReq. What were included in v3 are identical, the only difference from scsi-next is in "[03/14] virtio-scsi: Add VirtIOSCSIVring in VirtIOSCSIReq": > fam@fam-t430:~/qemu [virtio-scsi-dataplane]$ git diff paolo/scsi-next > diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h > index 2c4e515..6134c0b 100644 > --- a/include/hw/virtio/virtio-scsi.h > +++ b/include/hw/virtio/virtio-scsi.h > @@ -200,17 +200,10 @@ typedef struct VirtIOSCSI { > > typedef struct VirtIOSCSIReq { > VirtIOSCSI *dev; > - > + VirtQueue *vq; > QEMUSGList qsgl; > QEMUIOVector resp_iov; > > - /* set respectively by non-dataplane and dataplane code */ > - VirtQueue *vq; > - VirtIOSCSIVring *vring; > - > - /* Used for two-stage request submission */ > - QTAILQ_ENTRY(VirtIOSCSIReq) next; > - > /* Note: > * - fields before elem are initialized by virtio_scsi_init_req; > * - elem is uninitialized at the time of allocation. > @@ -218,6 +211,11 @@ typedef struct VirtIOSCSIReq { > * */ > > VirtQueueElement elem; > + /* Set by dataplane code. */ > + VirtIOSCSIVring *vring; > + /* Used by two stages request submitting */ > + QTAILQ_ENTRY(VirtIOSCSIReq) next; > + > SCSIRequest *sreq; > size_t resp_size; > enum SCSIXferMode mode; Sorry for the trouble, Paolo! Thanks, Fam Fam Zheng (14): virtio-scsi: Split virtio_scsi_handle_cmd_req from virtio_scsi_handle_cmd virtio-scsi: Split virtio_scsi_handle_ctrl_req from virtio_scsi_handle_ctrl virtio-scsi: Add VirtIOSCSIVring in VirtIOSCSIReq virtio-scsi: Make virtio_scsi_init_req public virtio-scsi: Make virtio_scsi_free_req public virtio-scsi: Make virtio_scsi_push_event public virtio-scsi: Add 'iothread' property to virtio-scsi-pci virtio-scsi-dataplane: Code to run virtio-scsi on iothread virtio-scsi: Hook up with dataplane virtio-scsi: Add migration state notifier for dataplane code virtio-scsi: Two stages processing of cmd request virtio-scsi: Batched prepare for cmd reqs virtio-scsi: Call bdrv_io_plug/bdrv_io_unplug in cmd request handling virtio-scsi: Process ".iothread" property hw/scsi/Makefile.objs | 2 +- hw/scsi/virtio-scsi-dataplane.c | 229 +++++++++++++++++++++++++++++++ hw/scsi/virtio-scsi.c | 292 +++++++++++++++++++++++++--------------- hw/virtio/virtio-pci.c | 2 + include/hw/virtio/virtio-scsi.h | 82 ++++++++++- 5 files changed, 497 insertions(+), 110 deletions(-) create mode 100644 hw/scsi/virtio-scsi-dataplane.c -- 1.9.3