All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/11] rust: migration: add high-level migration wrappers
@ 2025-10-01  7:49 Paolo Bonzini
  2025-10-01  7:52 ` [PATCH 01/11] rust: bql: add BqlRefCell::get_mut() Paolo Bonzini
                   ` (25 more replies)
  0 siblings, 26 replies; 55+ messages in thread
From: Paolo Bonzini @ 2025-10-01  7:49 UTC (permalink / raw)
  To: qemu-devel; +Cc: Zhao Liu

This series adds high-level wrappers to handle migration state; they consist
of a Migratable<> type that implements the snapshotting technique mentioned
in Zhao and my KVM Forum presentation.

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"; for this
reason they are marked as "proof of concept" in docs/devel/rust.rst.
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


RFC->v1:

new patches
- rust: migration: do not pass raw pointer to VMStateDescription::fields
- rust: migration: do not store raw pointers into VMStateSubsectionsWrapper
- rust: migration: validate termination of subsection arrays
- timer: constify some functions

changes
- use UnsafeCell::get_mut()
- add and use Timer::expire_time_ns()
- small reordering of the implementations of ToMigrationState/ToMigrationStateShared
- list migration::migratable in docs/devel/rust.rst


Paolo Bonzini (11):
  rust: bql: add BqlRefCell::get_mut()
  rust: migration: do not pass raw pointer to VMStateDescription::fields
  rust: migration: do not store raw pointers into
    VMStateSubsectionsWrapper
  rust: migration: validate termination of subsection arrays
  rust: migration: extract vmstate_fields_ref
  rust: move VMState from bql to migration
  rust: migration: add high-level migration wrappers
  rust: qemu-macros: add ToMigrationState derive macro
  timer: constify some functions
  rust: migration: implement ToMigrationState for Timer
  rust: migration: implement ToMigrationState as part of
    impl_vmstate_bitsized

 docs/devel/rust.rst                     |   1 +
 include/qemu/timer.h                    |   6 +-
 util/qemu-timer.c                       |   8 +-
 rust/Cargo.lock                         |   5 +-
 rust/bql/Cargo.toml                     |   3 -
 rust/bql/meson.build                    |   1 -
 rust/bql/src/cell.rs                    |  23 +-
 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        | 473 ++++++++++++++++++++++++
 rust/migration/src/vmstate.rs           |  85 +++--
 rust/qemu-macros/src/lib.rs             |  88 +++++
 rust/qemu-macros/src/migration_state.rs | 296 +++++++++++++++
 rust/qemu-macros/src/tests.rs           | 112 +++++-
 rust/util/src/timer.rs                  |  10 +-
 17 files changed, 1071 insertions(+), 56 deletions(-)
 create mode 100644 rust/migration/src/migratable.rs
 create mode 100644 rust/qemu-macros/src/migration_state.rs

-- 
2.51.0



^ permalink raw reply	[flat|nested] 55+ messages in thread

end of thread, other threads:[~2025-12-05 11:30 UTC | newest]

Thread overview: 55+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-01  7:49 [PATCH 00/11] rust: migration: add high-level migration wrappers Paolo Bonzini
2025-10-01  7:52 ` [PATCH 01/11] rust: bql: add BqlRefCell::get_mut() Paolo Bonzini
2025-10-13  8:49   ` Zhao Liu
2025-10-01  7:52 ` [PATCH 02/11] rust: migration: do not pass raw pointer to VMStateDescription::fields Paolo Bonzini
2025-10-13  8:20   ` Zhao Liu
2025-10-01  7:52 ` [PATCH 03/11] rust: migration: do not store raw pointers into VMStateSubsectionsWrapper Paolo Bonzini
2025-10-13  8:46   ` Zhao Liu
2025-10-01  7:52 ` [PATCH 04/11] rust: migration: validate termination of subsection arrays Paolo Bonzini
2025-10-13  8:46   ` Zhao Liu
2025-10-01  7:52 ` [PATCH 05/11] rust: migration: extract vmstate_fields_ref Paolo Bonzini
2025-10-13  8:55   ` Zhao Liu
2025-10-01  7:52 ` [PATCH 06/11] rust: move VMState from bql to migration Paolo Bonzini
2025-10-13  8:57   ` Zhao Liu
2025-10-01  7:52 ` [PATCH 07/11] rust: migration: add high-level migration wrappers Paolo Bonzini
2025-10-14  3:32   ` Zhao Liu
2025-10-01  7:52 ` [PATCH 08/11] rust: qemu-macros: add ToMigrationState derive macro Paolo Bonzini
2025-10-14  3:38   ` Zhao Liu
2025-11-03 10:25   ` Zhao Liu
2025-11-03 15:49     ` Zhao Liu
2025-11-04 14:40       ` Paolo Bonzini
2025-11-04 14:41       ` Zhao Liu
2025-10-01  7:52 ` [PATCH 09/11] timer: constify some functions Paolo Bonzini
2025-10-14  3:38   ` Zhao Liu
2025-10-01  7:52 ` [PATCH 10/11] rust: migration: implement ToMigrationState for Timer Paolo Bonzini
2025-10-14  6:55   ` Zhao Liu
2025-10-14  7:26     ` [PATCH 1/2] rust/timer: Make Timer::modify() accept an i64 expire_time Timer Zhao Liu
2025-10-14  7:28     ` [PATCH 2/2] rust/timer: Add Timer::modify_ns() Zhao Liu
2025-10-14 13:56     ` [PATCH 10/11] rust: migration: implement ToMigrationState for Timer Paolo Bonzini
2025-10-01  7:52 ` [PATCH 11/11] rust: migration: implement ToMigrationState as part of impl_vmstate_bitsized Paolo Bonzini
2025-10-14  5:18   ` Zhao Liu
2025-10-01  8:00 ` [PATCH preview 00/14] rust: QObject and QAPI bindings Paolo Bonzini
2025-10-01  8:00 ` [PATCH 01/14] qobject: make refcount atomic Paolo Bonzini
2025-10-13  7:51   ` Zhao Liu
2025-10-01  8:00 ` [PATCH 02/14] rust: add basic QObject bindings Paolo Bonzini
2025-12-04 14:15   ` Zhao Liu
2025-12-04 14:18     ` Paolo Bonzini
2025-12-05  6:30       ` Zhao Liu
2025-12-05 11:30       ` Paolo Bonzini
2025-10-01  8:00 ` [PATCH 03/14] subprojects: add serde Paolo Bonzini
2025-12-04 14:20   ` Zhao Liu
2025-10-01  8:00 ` [PATCH 04/14] rust: add Serialize implementation for QObject Paolo Bonzini
2025-12-05  7:38   ` Zhao Liu
2025-10-01  8:00 ` [PATCH 05/14] rust: add Serializer (to_qobject) " Paolo Bonzini
2025-12-05  9:13   ` Zhao Liu
2025-10-01  8:00 ` [PATCH 06/14] rust: add Deserialize " Paolo Bonzini
2025-12-05  9:54   ` Zhao Liu
2025-10-01  8:00 ` [PATCH 07/14] rust: add Deserializer (from_qobject) " Paolo Bonzini
2025-12-05 10:16   ` Zhao Liu
2025-10-01  8:00 ` [PATCH 08/14] rust/qobject: add Display/Debug Paolo Bonzini
2025-10-01  8:00 ` [PATCH 09/14] scripts/qapi: add QAPISchemaIfCond.rsgen() Paolo Bonzini
2025-10-01  8:00 ` [PATCH 10/14] scripts/qapi: generate high-level Rust bindings Paolo Bonzini
2025-10-01  8:00 ` [PATCH 11/14] scripts/qapi: strip trailing whitespaces Paolo Bonzini
2025-10-01  8:00 ` [PATCH 12/14] scripts/rustc_args: add --no-strict-cfg Paolo Bonzini
2025-10-01  8:00 ` [PATCH 13/14] rust/util: build QAPI types Paolo Bonzini
2025-10-01  8:00 ` [PATCH 14/14] rust: start qapi tests Paolo Bonzini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.