From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51040) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XWgtt-0008Nv-8q for qemu-devel@nongnu.org; Wed, 24 Sep 2014 03:22:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XWgtl-0005UW-UF for qemu-devel@nongnu.org; Wed, 24 Sep 2014 03:22:09 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42186) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XWgtl-0005M9-ME for qemu-devel@nongnu.org; Wed, 24 Sep 2014 03:22:01 -0400 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s8O7Ltdl030854 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Wed, 24 Sep 2014 03:21:56 -0400 From: Fam Zheng Date: Wed, 24 Sep 2014 15:21:38 +0800 Message-Id: <1411543312-6511-1-git-send-email-famz@redhat.com> Subject: [Qemu-devel] [PATCH v4 00/14] virtio-scsi: Dataplane on single iothread List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, pbonzini@redhat.com, stefanha@redhat.com 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