[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 04/16] virtio-scsi: add multiqueue capability
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 04/16] virtio-scsi: add multiqueue capability |
Date: |
Thu, 19 Apr 2012 16:29:24 +0200 |
Adding multiqueue is as simple as creating more than one virtqueues,
and saving the queue number for each request.
Signed-off-by: Paolo Bonzini <address@hidden>
---
hw/virtio-scsi.c | 27 ++++++++++++++++-----------
1 file changed, 16 insertions(+), 11 deletions(-)
diff --git a/hw/virtio-scsi.c b/hw/virtio-scsi.c
index 0d90d9c..e8328f4 100644
--- a/hw/virtio-scsi.c
+++ b/hw/virtio-scsi.c
@@ -129,12 +129,12 @@ typedef struct {
VirtIOSCSIConf *conf;
SCSIBus bus;
+ uint32_t sense_size;
+ uint32_t cdb_size;
+ int resetting;
VirtQueue *ctrl_vq;
VirtQueue *event_vq;
- VirtQueue *cmd_vq;
- uint32_t sense_size;
- uint32_t cdb_size;
- int resetting;
+ VirtQueue *cmd_vqs[0];
} VirtIOSCSI;
typedef struct VirtIOSCSIReq {
@@ -240,8 +240,9 @@ static VirtIOSCSIReq *virtio_scsi_pop_req(VirtIOSCSI *s,
VirtQueue *vq)
static void virtio_scsi_save_request(QEMUFile *f, SCSIRequest *sreq)
{
VirtIOSCSIReq *req = sreq->hba_private;
- uint32_t n = 0;
+ uint32_t n = virtio_queue_get_id(req->vq) - 2;
+ assert(n < req->dev->conf->num_queues);
qemu_put_be32s(f, &n);
qemu_put_buffer(f, (unsigned char *)&req->elem, sizeof(req->elem));
}
@@ -255,9 +256,9 @@ static void *virtio_scsi_load_request(QEMUFile *f,
SCSIRequest *sreq)
req = g_malloc(sizeof(*req));
qemu_get_be32s(f, &n);
- assert(n == 0);
+ assert(n < s->conf->num_queues);
qemu_get_buffer(f, (unsigned char *)&req->elem, sizeof(req->elem));
- virtio_scsi_parse_req(s, s->cmd_vq, req);
+ virtio_scsi_parse_req(s, s->cmd_vqs[n], req);
scsi_req_ref(sreq);
req->sreq = sreq;
@@ -584,10 +585,12 @@ VirtIODevice *virtio_scsi_init(DeviceState *dev,
VirtIOSCSIConf *proxyconf)
{
VirtIOSCSI *s;
static int virtio_scsi_id;
+ size_t sz;
+ int i;
+ sz = sizeof(VirtIOSCSI) + proxyconf->num_queues * sizeof(VirtQueue *);
s = (VirtIOSCSI *)virtio_common_init("virtio-scsi", VIRTIO_ID_SCSI,
- sizeof(VirtIOSCSIConfig),
- sizeof(VirtIOSCSI));
+ sizeof(VirtIOSCSIConfig), sz);
s->qdev = dev;
s->conf = proxyconf;
@@ -602,8 +605,10 @@ VirtIODevice *virtio_scsi_init(DeviceState *dev,
VirtIOSCSIConf *proxyconf)
virtio_scsi_handle_ctrl);
s->event_vq = virtio_add_queue(&s->vdev, VIRTIO_SCSI_VQ_SIZE,
NULL);
- s->cmd_vq = virtio_add_queue(&s->vdev, VIRTIO_SCSI_VQ_SIZE,
- virtio_scsi_handle_cmd);
+ for (i = 0; i < s->conf->num_queues; i++) {
+ s->cmd_vqs[i] = virtio_add_queue(&s->vdev, VIRTIO_SCSI_VQ_SIZE,
+ virtio_scsi_handle_cmd);
+ }
scsi_bus_new(&s->bus, dev, &virtio_scsi_scsi_info);
if (!dev->hotplugged) {
--
1.7.9.3
- [Qemu-devel] [PULL 00/16] Pending SCSI patches for 1.1, Paolo Bonzini, 2012/04/19
- [Qemu-devel] [PATCH 01/16] scsi: fix memory leak, Paolo Bonzini, 2012/04/19
- [Qemu-devel] [PATCH 03/16] virtio: add virtio_queue_get_id, Paolo Bonzini, 2012/04/19
- [Qemu-devel] [PATCH 05/16] scsi: add missing test for cancelled request, Paolo Bonzini, 2012/04/19
- [Qemu-devel] [PATCH 02/16] virtio-scsi: prepare migration format for multiqueue, Paolo Bonzini, 2012/04/19
- [Qemu-devel] [PATCH 04/16] virtio-scsi: add multiqueue capability,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 06/16] scsi: make code more homogeneous in AIO callback functions, Paolo Bonzini, 2012/04/19
- [Qemu-devel] [PATCH 10/16] scsi: add a started field to SCSIDiskReq, Paolo Bonzini, 2012/04/19
- [Qemu-devel] [PATCH 07/16] scsi: move scsi_flush_complete around, Paolo Bonzini, 2012/04/19
- [Qemu-devel] [PATCH 11/16] scsi: support FUA on reads, Paolo Bonzini, 2012/04/19
- [Qemu-devel] [PATCH 08/16] scsi: add support for FUA on writes, Paolo Bonzini, 2012/04/19
- [Qemu-devel] [PATCH 09/16] scsi: force unit access on VERIFY, Paolo Bonzini, 2012/04/19
- [Qemu-devel] [PATCH 13/16] scsi: advertise DPOFUA, Paolo Bonzini, 2012/04/19
- [Qemu-devel] [PATCH 12/16] scsi: small refactoring of MMC mode-sense, Paolo Bonzini, 2012/04/19
- [Qemu-devel] [PATCH 16/16] scsi: add SANITIZE command, Paolo Bonzini, 2012/04/19
- [Qemu-devel] [PATCH 14/16] SCSI emulation: Support unmap via WRITE_SAME_10., Paolo Bonzini, 2012/04/19