[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 12/14] virtio-scsi: Batched prepare for cmd reqs
From: |
Fam Zheng |
Subject: |
[Qemu-devel] [PATCH v4 12/14] virtio-scsi: Batched prepare for cmd reqs |
Date: |
Wed, 24 Sep 2014 15:21:50 +0800 |
Queue the popped requests while calling
virtio_scsi_handle_cmd_req_prepare(), then submit them after all
prepared.
Signed-off-by: Fam Zheng <address@hidden>
---
hw/scsi/virtio-scsi-dataplane.c | 9 +++++++--
hw/scsi/virtio-scsi.c | 9 +++++++--
include/hw/virtio/virtio-scsi.h | 3 +++
3 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/hw/scsi/virtio-scsi-dataplane.c b/hw/scsi/virtio-scsi-dataplane.c
index 11f5705..b778e05 100644
--- a/hw/scsi/virtio-scsi-dataplane.c
+++ b/hw/scsi/virtio-scsi-dataplane.c
@@ -122,14 +122,19 @@ static void virtio_scsi_iothread_handle_cmd(EventNotifier
*notifier)
VirtIOSCSIVring *vring = container_of(notifier,
VirtIOSCSIVring, host_notifier);
VirtIOSCSI *s = (VirtIOSCSI *)vring->parent;
- VirtIOSCSIReq *req;
+ VirtIOSCSIReq *req, *next;
+ QTAILQ_HEAD(, VirtIOSCSIReq) reqs = QTAILQ_HEAD_INITIALIZER(reqs);
event_notifier_test_and_clear(notifier);
while ((req = virtio_scsi_pop_req_vring(s, vring))) {
if (virtio_scsi_handle_cmd_req_prepare(s, req)) {
- virtio_scsi_handle_cmd_req_submit(s, req);
+ QTAILQ_INSERT_TAIL(&reqs, req, next);
}
}
+
+ QTAILQ_FOREACH_SAFE(req, &reqs, next, next) {
+ virtio_scsi_handle_cmd_req_submit(s, req);
+ }
}
/* Context: QEMU global mutex held */
diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
index 6cf070f..395178e 100644
--- a/hw/scsi/virtio-scsi.c
+++ b/hw/scsi/virtio-scsi.c
@@ -502,7 +502,8 @@ static void virtio_scsi_handle_cmd(VirtIODevice *vdev,
VirtQueue *vq)
{
/* use non-QOM casts in the data path */
VirtIOSCSI *s = (VirtIOSCSI *)vdev;
- VirtIOSCSIReq *req;
+ VirtIOSCSIReq *req, *next;
+ QTAILQ_HEAD(, VirtIOSCSIReq) reqs = QTAILQ_HEAD_INITIALIZER(reqs);
if (s->ctx && !s->dataplane_disabled) {
virtio_scsi_dataplane_start(s);
@@ -510,9 +511,13 @@ static void virtio_scsi_handle_cmd(VirtIODevice *vdev,
VirtQueue *vq)
}
while ((req = virtio_scsi_pop_req(s, vq))) {
if (virtio_scsi_handle_cmd_req_prepare(s, req)) {
- virtio_scsi_handle_cmd_req_submit(s, req);
+ QTAILQ_INSERT_TAIL(&reqs, req, next);
}
}
+
+ QTAILQ_FOREACH_SAFE(req, &reqs, next, next) {
+ virtio_scsi_handle_cmd_req_submit(s, req);
+ }
}
static void virtio_scsi_get_config(VirtIODevice *vdev,
diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h
index 1cc759a..6134c0b 100644
--- a/include/hw/virtio/virtio-scsi.h
+++ b/include/hw/virtio/virtio-scsi.h
@@ -213,6 +213,9 @@ 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;
--
1.9.3
- [Qemu-devel] [PATCH v4 02/14] virtio-scsi: Split virtio_scsi_handle_ctrl_req from virtio_scsi_handle_ctrl, (continued)
- [Qemu-devel] [PATCH v4 02/14] virtio-scsi: Split virtio_scsi_handle_ctrl_req from virtio_scsi_handle_ctrl, Fam Zheng, 2014/09/24
- [Qemu-devel] [PATCH v4 03/14] virtio-scsi: Add VirtIOSCSIVring in VirtIOSCSIReq, Fam Zheng, 2014/09/24
- [Qemu-devel] [PATCH v4 04/14] virtio-scsi: Make virtio_scsi_init_req public, Fam Zheng, 2014/09/24
- [Qemu-devel] [PATCH v4 05/14] virtio-scsi: Make virtio_scsi_free_req public, Fam Zheng, 2014/09/24
- [Qemu-devel] [PATCH v4 06/14] virtio-scsi: Make virtio_scsi_push_event public, Fam Zheng, 2014/09/24
- [Qemu-devel] [PATCH v4 07/14] virtio-scsi: Add 'iothread' property to virtio-scsi-pci, Fam Zheng, 2014/09/24
- [Qemu-devel] [PATCH v4 08/14] virtio-scsi-dataplane: Code to run virtio-scsi on iothread, Fam Zheng, 2014/09/24
- [Qemu-devel] [PATCH v4 09/14] virtio-scsi: Hook up with dataplane, Fam Zheng, 2014/09/24
- [Qemu-devel] [PATCH v4 10/14] virtio-scsi: Add migration state notifier for dataplane code, Fam Zheng, 2014/09/24
- [Qemu-devel] [PATCH v4 11/14] virtio-scsi: Two stages processing of cmd request, Fam Zheng, 2014/09/24
- [Qemu-devel] [PATCH v4 12/14] virtio-scsi: Batched prepare for cmd reqs,
Fam Zheng <=
- [Qemu-devel] [PATCH v4 13/14] virtio-scsi: Call bdrv_io_plug/bdrv_io_unplug in cmd request handling, Fam Zheng, 2014/09/24
- [Qemu-devel] [PATCH v4 14/14] virtio-scsi: Process ".iothread" property, Fam Zheng, 2014/09/24