mbox series

[0/9] rust/hpet: Initial support for migration

Message ID 20250414144943.1112885-1-zhao1.liu@intel.com (mailing list archive)
Headers show
Series rust/hpet: Initial support for migration | expand

Message

Zhao Liu April 14, 2025, 2:49 p.m. UTC
Hi all,

This series add the *initial* support for HPET migration.

This is *initial* because the current migration implementation
introduces multiple *unsafe* callbacks (please refer Patch 8).

Before the vmstate builder, one possible cleanup approach is to wrap
callbacks in the vmstate binding using a method similar to the
vmstate_exist_fn macro.

However, this approach would also create a lot of repetitive code (since
vmstate has so many callbacks: pre_load, post_load, pre_save, post_save,
needed and dev_unplug_pending). Although it would be cleaner, it would
somewhat deviate from the path of the vmstate builder.

Therefore, firstly focus on completing the functionality of HPET, and
those current unsafe callbacks can at least clearly indicate the needed
functionality of vmstate. The next step is to consider refactoring
vmstate to move towards the vmstate builder direction.

Test this series with 3 migration cases:
 * q35 (Rust HPET) -> q35 (Rust HPET)
 * q35 (Rust HPET) -> q35 (C HPET)
 * q35 (C HPET) -> q35 (Rust HPET)

Thanks and Best Regards,
Zhao
---
Zhao Liu (9):
  rust/vmstate: Support field_exists check in vmstate_struct macro
  rust/vmstate: Support varray's num field wrapped in BqlCell
  rust/vmstate_test: Test varray with num field wrapped in BqlCell
  rust/vmstate_test: Fix typo in
    test_vmstate_macro_array_of_pointer_wrapped()
  rust/timer: Define NANOSECONDS_PER_SECOND binding as u64
  rust/hpet: convert num_timers to u8 type
  rust/hpet: convert HPETTimer index to u8 type
  rust/hpet: Support migration
  rust/hpet: Fix a clippy error

 docs/devel/rust.rst                  |   3 +-
 rust/hw/timer/hpet/src/hpet.rs       | 189 ++++++++++++++++++++++++---
 rust/qemu-api/src/assertions.rs      |  30 ++++-
 rust/qemu-api/src/cell.rs            |  23 ++++
 rust/qemu-api/src/timer.rs           |   2 +
 rust/qemu-api/src/vmstate.rs         |  67 +++++-----
 rust/qemu-api/tests/vmstate_tests.rs |  45 +++++--
 7 files changed, 294 insertions(+), 65 deletions(-)

Comments

Paolo Bonzini April 15, 2025, 10:24 a.m. UTC | #1
On 4/14/25 16:49, Zhao Liu wrote:
> Hi all,
> 
> This series add the *initial* support for HPET migration.
> 
> This is *initial* because the current migration implementation
> introduces multiple *unsafe* callbacks (please refer Patch 8).
> 
> Before the vmstate builder, one possible cleanup approach is to wrap
> callbacks in the vmstate binding using a method similar to the
> vmstate_exist_fn macro.
> 
> However, this approach would also create a lot of repetitive code (since
> vmstate has so many callbacks: pre_load, post_load, pre_save, post_save,
> needed and dev_unplug_pending). Although it would be cleaner, it would
> somewhat deviate from the path of the vmstate builder.
> 
> Therefore, firstly focus on completing the functionality of HPET, and
> those current unsafe callbacks can at least clearly indicate the needed
> functionality of vmstate. The next step is to consider refactoring
> vmstate to move towards the vmstate builder direction.

Merged 4/6/7/9 for now, thanks! I'll reply to patch 2 with a review.

Paolo

> Test this series with 3 migration cases:
>   * q35 (Rust HPET) -> q35 (Rust HPET)
>   * q35 (Rust HPET) -> q35 (C HPET)
>   * q35 (C HPET) -> q35 (Rust HPET)
> 
> Thanks and Best Regards,
> Zhao
> ---
> Zhao Liu (9):
>    rust/vmstate: Support field_exists check in vmstate_struct macro
>    rust/vmstate: Support varray's num field wrapped in BqlCell
>    rust/vmstate_test: Test varray with num field wrapped in BqlCell
>    rust/vmstate_test: Fix typo in
>      test_vmstate_macro_array_of_pointer_wrapped()
>    rust/timer: Define NANOSECONDS_PER_SECOND binding as u64
>    rust/hpet: convert num_timers to u8 type
>    rust/hpet: convert HPETTimer index to u8 type
>    rust/hpet: Support migration
>    rust/hpet: Fix a clippy error
> 
>   docs/devel/rust.rst                  |   3 +-
>   rust/hw/timer/hpet/src/hpet.rs       | 189 ++++++++++++++++++++++++---
>   rust/qemu-api/src/assertions.rs      |  30 ++++-
>   rust/qemu-api/src/cell.rs            |  23 ++++
>   rust/qemu-api/src/timer.rs           |   2 +
>   rust/qemu-api/src/vmstate.rs         |  67 +++++-----
>   rust/qemu-api/tests/vmstate_tests.rs |  45 +++++--
>   7 files changed, 294 insertions(+), 65 deletions(-)
>