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<arm...@redhat.com>
---
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 f223de6..04e0a77 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -1301,6 +1301,39 @@ static int scsi_disk_initfn(SCSIDevice *dev)
return scsi_initfn(dev, scsi_type);
}
+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()
+ }
+};
+