As Paolo points out, the migration protocol is ambiguous when using subsections today. That means that even if we preserve subsections and change the protocol accordingly, the old protocol w/subsections is still ambiguous.
Remove subsection usage and bump any device using subsections. This effectively eliminates the amiguouity and allows for a clean transition to a new protocol with unambiguous subsections. Signed-off-by: Anthony Liguori <aligu...@us.ibm.com> --- hw/fdc.c | 37 ++++++------------------------------- hw/rtl8139.c | 34 +++------------------------------- 2 files changed, 9 insertions(+), 62 deletions(-) diff --git a/hw/fdc.c b/hw/fdc.c index edf0360..d8d74c9 100644 --- a/hw/fdc.c +++ b/hw/fdc.c @@ -554,45 +554,20 @@ static int fdrive_media_changed_post_load(void *opaque, int version_id) return 0; } -static bool fdrive_media_changed_needed(void *opaque) -{ - FDrive *drive = opaque; - - return (drive->bs != NULL && drive->bs->media_changed != 1); -} - -static const VMStateDescription vmstate_fdrive_media_changed = { - .name = "fdrive/media_changed", - .version_id = 1, - .minimum_version_id = 1, - .minimum_version_id_old = 1, - .pre_save = fdrive_media_changed_pre_save, - .post_load = fdrive_media_changed_post_load, - .fields = (VMStateField[]) { - VMSTATE_UINT8(media_changed, FDrive), - VMSTATE_END_OF_LIST() - } -}; - static const VMStateDescription vmstate_fdrive = { .name = "fdrive", - .version_id = 1, - .minimum_version_id = 1, - .minimum_version_id_old = 1, + .version_id = 2, + .minimum_version_id = 2, + .minimum_version_id_old = 2, + .pre_save = fdrive_media_changed_pre_save, + .post_load = fdrive_media_changed_post_load, .fields = (VMStateField[]) { VMSTATE_UINT8(head, FDrive), VMSTATE_UINT8(track, FDrive), VMSTATE_UINT8(sect, FDrive), + VMSTATE_UINT8(media_changed, FDrive), VMSTATE_END_OF_LIST() }, - .subsections = (VMStateSubsection[]) { - { - .vmsd = &vmstate_fdrive_media_changed, - .needed = &fdrive_media_changed_needed, - } , { - /* empty */ - } - } }; static void fdc_pre_save(void *opaque) diff --git a/hw/rtl8139.c b/hw/rtl8139.c index 5214b8c..11951f2 100644 --- a/hw/rtl8139.c +++ b/hw/rtl8139.c @@ -505,9 +505,6 @@ typedef struct RTL8139State { /* PCI interrupt timer */ QEMUTimer *timer; int64_t TimerExpire; - - /* Support migration to/from old versions */ - int rtl8139_mmio_io_addr_dummy; } RTL8139State; static void rtl8139_set_next_tctr_time(RTL8139State *s, int64_t current_time); @@ -3259,21 +3256,6 @@ static int rtl8139_post_load(void *opaque, int version_id) return 0; } -static bool rtl8139_hotplug_ready_needed(void *opaque) -{ - return qdev_machine_modified(); -} - -static const VMStateDescription vmstate_rtl8139_hotplug_ready ={ - .name = "rtl8139/hotplug_ready", - .version_id = 1, - .minimum_version_id = 1, - .minimum_version_id_old = 1, - .fields = (VMStateField []) { - VMSTATE_END_OF_LIST() - } -}; - static void rtl8139_pre_save(void *opaque) { RTL8139State* s = opaque; @@ -3283,14 +3265,13 @@ static void rtl8139_pre_save(void *opaque) rtl8139_set_next_tctr_time(s, current_time); s->TCTR = muldiv64(current_time - s->TCTR_base, PCI_FREQUENCY, get_ticks_per_sec()); - s->rtl8139_mmio_io_addr_dummy = s->rtl8139_mmio_io_addr; } static const VMStateDescription vmstate_rtl8139 = { .name = "rtl8139", - .version_id = 4, - .minimum_version_id = 3, - .minimum_version_id_old = 3, + .version_id = 5, + .minimum_version_id = 5, + .minimum_version_id_old = 5, .post_load = rtl8139_post_load, .pre_save = rtl8139_pre_save, .fields = (VMStateField []) { @@ -3336,7 +3317,6 @@ static const VMStateDescription vmstate_rtl8139 = { VMSTATE_UNUSED(4), VMSTATE_MACADDR(conf.macaddr, RTL8139State), - VMSTATE_INT32(rtl8139_mmio_io_addr_dummy, RTL8139State), VMSTATE_UINT32(currTxDesc, RTL8139State), VMSTATE_UINT32(currCPlusRxDesc, RTL8139State), @@ -3366,14 +3346,6 @@ static const VMStateDescription vmstate_rtl8139 = { VMSTATE_UINT32_V(cplus_enabled, RTL8139State, 4), VMSTATE_END_OF_LIST() }, - .subsections = (VMStateSubsection []) { - { - .vmsd = &vmstate_rtl8139_hotplug_ready, - .needed = rtl8139_hotplug_ready_needed, - }, { - /* empty */ - } - } }; /***********************************************************/ -- 1.7.4.1