qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, stefanha@gmail.com, christian.hoff@de.ibm.com,
	kvm@vger.kernel.org
Subject: [Qemu-devel] [PATCH v3 15/15] virtio-scsi: add migration support
Date: Mon, 13 Feb 2012 18:10:22 +0100	[thread overview]
Message-ID: <1329153022-31159-16-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1329153022-31159-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 7ad60ec..f5cecfc 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);
@@ -508,6 +536,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,
@@ -517,11 +561,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),
@@ -548,7 +595,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

      parent reply	other threads:[~2012-02-13 17:11 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-13 17:10 [Qemu-devel] [PATCH v3 00/15] SCSI s/g + SCSI migration + virtio-scsi Paolo Bonzini
2012-02-13 17:10 ` [Qemu-devel] [PATCH v3 01/15] dma-helpers: make QEMUSGList target independent Paolo Bonzini
2012-02-13 17:10 ` [Qemu-devel] [PATCH v3 02/15] dma-helpers: add dma_buf_read and dma_buf_write Paolo Bonzini
2012-02-13 17:10 ` [Qemu-devel] [PATCH v3 03/15] dma-helpers: add accounting wrappers Paolo Bonzini
2012-02-13 17:10 ` [Qemu-devel] [PATCH v3 04/15] ahci: use new DMA helpers Paolo Bonzini
2012-02-13 17:10 ` [Qemu-devel] [PATCH v3 05/15] scsi: pass residual amount to command_complete Paolo Bonzini
2012-02-13 17:10 ` [Qemu-devel] [PATCH v3 06/15] scsi: add scatter/gather functionality Paolo Bonzini
2012-02-13 17:10 ` [Qemu-devel] [PATCH v3 07/15] scsi-disk: enable " Paolo Bonzini
2012-02-13 17:10 ` [Qemu-devel] [PATCH v3 08/15] scsi: add SCSIDevice vmstate definitions Paolo Bonzini
2012-02-13 17:10 ` [Qemu-devel] [PATCH v3 09/15] scsi-generic: add migration support Paolo Bonzini
2012-02-13 17:10 ` [Qemu-devel] [PATCH v3 10/15] scsi-disk: " Paolo Bonzini
2012-02-13 17:10 ` [Qemu-devel] [PATCH v3 11/15] virtio-scsi: Add virtio-scsi stub device Paolo Bonzini
2012-02-13 17:10 ` [Qemu-devel] [PATCH v3 12/15] virtio-scsi: Add basic request processing infrastructure Paolo Bonzini
2012-02-13 17:10 ` [Qemu-devel] [PATCH v3 13/15] virtio-scsi: add basic SCSI bus operation Paolo Bonzini
2012-02-13 17:10 ` [Qemu-devel] [PATCH v3 14/15] virtio-scsi: process control queue requests Paolo Bonzini
2012-02-13 17:10 ` Paolo Bonzini [this message]

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=1329153022-31159-16-git-send-email-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=christian.hoff@de.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=kwolf@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.com \
    /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).