Am 04.08.2011 08:23, schrieb Hannes Reinecke: > On 08/03/2011 03:08 PM, Markus Armbruster wrote: >> 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() >> + } >> +}; >> + > And again; if we had just one 'flags' value we would have to save > only one variable. And wouldn't need to touch this one for future > states.
I think the policy is that you need to add a subsection anyway, even if you just add a flag to an existing field. Kevin