From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH v4 15/18] virtio-scsi: add migration support
Date: Wed, 22 Feb 2012 15:33:53 +0100 [thread overview]
Message-ID: <1329921236-23461-16-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1329921236-23461-1-git-send-email-pbonzini@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/virtio-scsi.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 49 insertions(+), 1 deletions(-)
diff --git a/hw/virtio-scsi.c b/hw/virtio-scsi.c
index 380073a..7f850d1 100644
--- a/hw/virtio-scsi.c
+++ b/hw/virtio-scsi.c
@@ -237,6 +237,34 @@ static VirtIOSCSIReq *virtio_scsi_pop_req(VirtIOSCSI *s, VirtQueue *vq)
return req;
}
+static void virtio_scsi_save_request(QEMUFile *f, SCSIRequest *sreq)
+{
+ VirtIOSCSIReq *req = sreq->hba_private;
+
+ qemu_put_buffer(f, (unsigned char *)&req->elem, sizeof(req->elem));
+}
+
+static void *virtio_scsi_load_request(QEMUFile *f, SCSIRequest *sreq)
+{
+ SCSIBus *bus = sreq->bus;
+ VirtIOSCSI *s = container_of(bus, VirtIOSCSI, bus);
+ VirtIOSCSIReq *req;
+
+ req = g_malloc(sizeof(*req));
+ qemu_get_buffer(f, (unsigned char *)&req->elem, sizeof(req->elem));
+ virtio_scsi_parse_req(s, s->cmd_vq, req);
+
+ scsi_req_ref(sreq);
+ req->sreq = sreq;
+ if (req->sreq->cmd.mode != SCSI_XFER_NONE) {
+ int req_mode =
+ (req->elem.in_num > 1 ? SCSI_XFER_FROM_DEV : SCSI_XFER_TO_DEV);
+
+ assert(req->sreq->cmd.mode == req_mode);
+ }
+ return req;
+}
+
static void virtio_scsi_do_tmf(VirtIOSCSI *s, VirtIOSCSIReq *req)
{
SCSIDevice *d = virtio_scsi_device_find(s, req->req.cmd->lun);
@@ -518,6 +546,22 @@ static void virtio_scsi_reset(VirtIODevice *vdev)
s->cdb_size = VIRTIO_SCSI_CDB_SIZE;
}
+/* The device does not have anything to save beyond the virtio data.
+ * Request data is saved with callbacks from SCSI devices.
+ */
+static void virtio_scsi_save(QEMUFile *f, void *opaque)
+{
+ VirtIOSCSI *s = opaque;
+ virtio_save(&s->vdev, f);
+}
+
+static int virtio_scsi_load(QEMUFile *f, void *opaque, int version_id)
+{
+ VirtIOSCSI *s = opaque;
+ virtio_load(&s->vdev, f);
+ return 0;
+}
+
static struct SCSIBusInfo virtio_scsi_scsi_info = {
.tcq = true,
.max_channel = VIRTIO_SCSI_MAX_CHANNEL,
@@ -527,11 +571,14 @@ static struct SCSIBusInfo virtio_scsi_scsi_info = {
.complete = virtio_scsi_command_complete,
.cancel = virtio_scsi_request_cancelled,
.get_sg_list = virtio_scsi_get_sg_list,
+ .save_request = virtio_scsi_save_request,
+ .load_request = virtio_scsi_load_request,
};
VirtIODevice *virtio_scsi_init(DeviceState *dev, VirtIOSCSIConf *proxyconf)
{
VirtIOSCSI *s;
+ static int virtio_scsi_id;
s = (VirtIOSCSI *)virtio_common_init("virtio-scsi", VIRTIO_ID_SCSI,
sizeof(VirtIOSCSIConfig),
@@ -558,7 +605,8 @@ VirtIODevice *virtio_scsi_init(DeviceState *dev, VirtIOSCSIConf *proxyconf)
scsi_bus_legacy_handle_cmdline(&s->bus);
}
- /* TODO savevm */
+ register_savevm(dev, "virtio-scsi", virtio_scsi_id++, 1,
+ virtio_scsi_save, virtio_scsi_load, s);
return &s->vdev;
}
--
1.7.7.6
next prev parent reply other threads:[~2012-02-22 14:34 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-22 14:33 [Qemu-devel] [PULL v4 00/18] virtio-scsi driver Paolo Bonzini
2012-02-22 14:33 ` [Qemu-devel] [PATCH v4 01/18] dma-helpers: make QEMUSGList target independent Paolo Bonzini
2012-02-22 14:33 ` [Qemu-devel] [PATCH v4 02/18] dma-helpers: add dma_buf_read and dma_buf_write Paolo Bonzini
2012-02-22 14:33 ` [Qemu-devel] [PATCH v4 03/18] dma-helpers: add accounting wrappers Paolo Bonzini
2012-02-22 14:33 ` [Qemu-devel] [PATCH v4 04/18] ahci: use new DMA helpers Paolo Bonzini
2012-02-22 14:33 ` [Qemu-devel] [PATCH v4 05/18] scsi: pass residual amount to command_complete Paolo Bonzini
2012-02-22 14:33 ` [Qemu-devel] [PATCH v4 06/18] scsi: add scatter/gather functionality Paolo Bonzini
2012-02-22 14:33 ` [Qemu-devel] [PATCH v4 07/18] scsi-disk: enable " Paolo Bonzini
2012-02-22 14:33 ` [Qemu-devel] [PATCH v4 08/18] scsi: add SCSIDevice vmstate definitions Paolo Bonzini
2012-02-22 14:33 ` [Qemu-devel] [PATCH v4 09/18] scsi-generic: add migration support Paolo Bonzini
2012-02-22 14:33 ` [Qemu-devel] [PATCH v4 10/18] scsi-disk: " Paolo Bonzini
2012-02-22 14:33 ` [Qemu-devel] [PATCH v4 11/18] virtio-scsi: Add virtio-scsi stub device Paolo Bonzini
2012-02-22 14:33 ` [Qemu-devel] [PATCH v4 12/18] virtio-scsi: Add basic request processing infrastructure Paolo Bonzini
2012-02-22 14:33 ` [Qemu-devel] [PATCH v4 13/18] virtio-scsi: add basic SCSI bus operation Paolo Bonzini
2012-02-22 14:33 ` [Qemu-devel] [PATCH v4 14/18] virtio-scsi: process control queue requests Paolo Bonzini
2012-02-24 7:54 ` Hu Tao
2012-02-24 8:56 ` Paolo Bonzini
2012-02-24 13:58 ` Paolo Bonzini
2012-02-22 14:33 ` Paolo Bonzini [this message]
2012-02-22 14:33 ` [Qemu-devel] [PATCH v4 16/18] scsi: fix wrong return for target INQUIRY Paolo Bonzini
2012-02-22 14:33 ` [Qemu-devel] [PATCH v4 17/18] scsi: fix searching for an empty id Paolo Bonzini
2012-02-22 14:33 ` [Qemu-devel] [PATCH v4 18/18] scsi-block: always use scsi_generic_ops for cache != none Paolo Bonzini
2012-02-24 16:34 ` [Qemu-devel] [PULL v4 00/18] virtio-scsi driver Anthony Liguori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1329921236-23461-16-git-send-email-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).