From: Marc-André Lureau <[email protected]> Hi,
Surprisingly, the migration code doesn't check that required migration entries and subsections are loaded. Either optional or required sections are both ignored when missing. According to the documentation a "newer QEMU that knows about a subsection can (with care) load a stream from an older QEMU that didn't send the subsection". I propose this behaviour to be limited to "optional" sections only. This series has a few preliminary fixes, add new checks that entries are loaded once and required ones have been loaded, add some tests and documentation update. thanks v3: - rebased, drop RFC status - switch from tracepoint + returning an error to report for missing subsections, as we worry about potential regressions - add r-b tags v2: - add "migration: rename vmstate_save_needed->vmstate_section_needed" - add "migration: set file error on subsection loading" - add subsection tests - update the documentation Marc-André Lureau (6): block/fdc: 'phase' is not needed on load virtio: make endian_needed() work during loading migration: check required subsections are loaded, once migration: check required entries are loaded, once test-vmstate: add some subsection tests docs/migration: reflect the changes about needed subsections docs/devel/migration.rst | 17 +++--- hw/block/fdc.c | 5 ++ hw/virtio/virtio.c | 6 +- migration/savevm.c | 43 ++++++++++++++ migration/vmstate.c | 40 ++++++++++++- tests/unit/test-vmstate.c | 116 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 215 insertions(+), 12 deletions(-) -- 2.41.0
