]> git.ipfire.org Git - thirdparty/qemu.git/commit
rust: migration: add high-level migration wrappers
authorPaolo Bonzini <pbonzini@redhat.com>
Mon, 15 Sep 2025 09:34:36 +0000 (11:34 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 14 Oct 2025 09:04:02 +0000 (11:04 +0200)
commit44a9d1b86c06ea955e4720ae5de8c130ff5719bc
treea972d98d55787e547d713c818765660abcbbccf5
parent4526418affcd536748a344bdba9a6913a5f7e135
rust: migration: add high-level migration wrappers

Instead of dealing with pre/post callbacks, allow devices to
implement a snapshot/restore mechanism; this has two main
advantages:

- it can be easily implemented via procedural macros

- there can be generic implementations to deal with various
  kinds of interior-mutable containers, from BqlRefCell to Mutex,
  so that C code does not see Rust concepts such as Mutex<>.

Using it is easy; you can implement the snapshot/restore trait
ToMigrationState and declare your state like:

     regs: Migratable<Mutex<MyDeviceRegisters>>

Migratable<> allows dereferencing to the underlying object with
no run-time cost.

Note that Migratable<> actually does not accept ToMigrationState,
only the similar ToMigrationStateShared trait that the user will mostly
not care about.  This is required by the fact that pre/post callbacks
take a &self, and ensures that the argument is a Mutex or BqlRefCell
(including an array or Arc<> thereof).

Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
docs/devel/rust.rst
rust/migration/meson.build
rust/migration/src/lib.rs
rust/migration/src/migratable.rs [new file with mode: 0644]