[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 38/55] scsi-disk: Preserve tray state on migration
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH 38/55] scsi-disk: Preserve tray state on migration |
Date: |
Wed, 20 Jul 2011 18:24:12 +0200 |
Breaks migration of qdevs "scsi-cd" and legacy "scsi-disk" to older
versions. We normally use subsections to avoid that. Not possible
here, because we don't have a section to begin with. Too bad.
Signed-off-by: Markus Armbruster <address@hidden>
---
hw/scsi-disk.c | 35 +++++++++++++++++++++++++++++++++++
1 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index 553d8c6..ad63814 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -1368,6 +1368,39 @@ static int scsi_disk_initfn(SCSIDevice *dev)
return scsi_initfn(dev, kind);
}
+static int scsi_cd_post_load(void *opaque, int version_id)
+{
+ SCSIDiskState *s = opaque;
+
+ bdrv_eject(s->bs, s->tray_open);
+ bdrv_lock_medium(s->bs, s->tray_locked);
+ return 0;
+}
+
+static const VMStateDescription vmstate_scsi_cd = {
+ .name = "scsi-cd",
+ .version_id = 0,
+ .minimum_version_id = 0,
+ .post_load = scsi_cd_post_load,
+ .fields = (VMStateField[]) {
+ VMSTATE_BOOL(tray_open, SCSIDiskState),
+ VMSTATE_BOOL(tray_locked, SCSIDiskState),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
+static const VMStateDescription vmstate_scsi_disk = {
+ .name = "scsi-disk",
+ .version_id = 0,
+ .minimum_version_id = 0,
+ .post_load = scsi_cd_post_load,
+ .fields = (VMStateField[]) {
+ VMSTATE_BOOL(tray_open, SCSIDiskState),
+ VMSTATE_BOOL(tray_locked, SCSIDiskState),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
#define DEFINE_SCSI_DISK_PROPERTIES() \
DEFINE_BLOCK_PROPERTIES(SCSIDiskState, qdev.conf), \
DEFINE_PROP_STRING("ver", SCSIDiskState, version), \
@@ -1400,6 +1433,7 @@ static SCSIDeviceInfo scsi_disk_info[] = {
.qdev.fw_name = "disk",
.qdev.desc = "virtual SCSI CD-ROM",
.qdev.size = sizeof(SCSIDiskState),
+ .qdev.vmsd = &vmstate_scsi_cd,
.qdev.reset = scsi_disk_reset,
.init = scsi_cd_initfn,
.destroy = scsi_destroy,
@@ -1420,6 +1454,7 @@ static SCSIDeviceInfo scsi_disk_info[] = {
.qdev.fw_name = "disk",
.qdev.desc = "virtual SCSI disk or CD-ROM (legacy)",
.qdev.size = sizeof(SCSIDiskState),
+ .qdev.vmsd = &vmstate_scsi_disk,
.qdev.reset = scsi_disk_reset,
.init = scsi_disk_initfn,
.destroy = scsi_destroy,
--
1.7.2.3
- [Qemu-devel] [PATCH 49/55] block: Declare qemu_blockalign() in block.h, not block_int.h, (continued)
- [Qemu-devel] [PATCH 50/55] block: New bdrv_set_buffer_alignment(), Markus Armbruster, 2011/07/20
- [Qemu-devel] [PATCH 52/55] block: Move BlockDriverAIOCB & friends from block_int.h to block.h, Markus Armbruster, 2011/07/20
- [Qemu-devel] [PATCH 38/55] scsi-disk: Preserve tray state on migration,
Markus Armbruster <=
- [Qemu-devel] [PATCH 51/55] block: Reset buffer alignment on detach, Markus Armbruster, 2011/07/20
- [Qemu-devel] [PATCH 37/55] ide/atapi: Preserve tray state on migration, Markus Armbruster, 2011/07/20
- [Qemu-devel] [PATCH 41/55] fdc: Make media change detection more robust, Markus Armbruster, 2011/07/20
- [Qemu-devel] [PATCH 30/55] block: Rename bdrv_set_locked() to bdrv_lock_medium(), Markus Armbruster, 2011/07/20
- [Qemu-devel] [PATCH 42/55] block: Clean up bdrv_flush_all(), Markus Armbruster, 2011/07/20
- [Qemu-devel] [PATCH 35/55] scsi-disk: Avoid physical/virtual tray state mismatch, Markus Armbruster, 2011/07/20
- [Qemu-devel] [PATCH 45/55] block: Clean up remaining users of "removable", Markus Armbruster, 2011/07/20