This series adds high-level wrappers to handle migration state; they consist of a Migratable<> type that implements the snapshotting technique mentioned at KVM Forum. The concepts are also discussed at https://lore.kernel.org/qemu-devel/8076a298-1cd9-4c90-a64c-f65004753...@redhat.com/T/
The wrappers (should) make it possible to easily implement migration of thread-safe devices. I say "should" because, even though there are tests included in the series, they are anything but "battle tested". The first device to use this will be HPET. This is an interesting step in enabling usage of Rust in QEMU; instead of just wrapping existing C APIs, it provides a new interface that deals better with unique features of the Rust language. In other words, something like Migratable<> and ToMigrationState might hypothetically exist even if QEMU was written in Rust from scratch. Paolo Paolo Bonzini (7): rust: bql: add BqlRefCell::get_mut() rust: move VMState from bql to migration rust: migration: extract vmstate_fields_ref rust: migration: add high-level migration wrappers rust: qemu-macros: add ToMigrationState derive macro rust: migration: implement ToMigrationState for Timer rust: migration: implement ToMigrationState as part of impl_vmstate_bitsized rust/Cargo.lock | 5 +- rust/bql/Cargo.toml | 3 - rust/bql/meson.build | 1 - rust/bql/src/cell.rs | 25 +- rust/meson.build | 2 +- rust/migration/Cargo.toml | 2 + rust/migration/meson.build | 7 +- rust/migration/src/lib.rs | 5 + rust/migration/src/migratable.rs | 469 ++++++++++++++++++++++++ rust/migration/src/vmstate.rs | 44 ++- rust/qemu-macros/src/lib.rs | 88 +++++ rust/qemu-macros/src/migration_state.rs | 296 +++++++++++++++ rust/qemu-macros/src/tests.rs | 112 +++++- 13 files changed, 1034 insertions(+), 25 deletions(-) create mode 100644 rust/migration/src/migratable.rs create mode 100644 rust/qemu-macros/src/migration_state.rs -- 2.51.0