The high-level wrapper Migratable<T> will contain a BqlCell, which would introduce a circular dependency betwen the bql and migration crates. Move the implementation of VMState for cells to "migration", together with the implementation for std types.
Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> --- rust/Cargo.lock | 4 +--- rust/bql/Cargo.toml | 3 --- rust/bql/meson.build | 1 - rust/bql/src/cell.rs | 6 ------ rust/meson.build | 2 +- rust/migration/Cargo.toml | 1 + rust/migration/meson.build | 4 ++-- rust/migration/src/vmstate.rs | 2 ++ 8 files changed, 7 insertions(+), 16 deletions(-) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 2826c4d027b..960f603cedb 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -57,9 +57,6 @@ dependencies = [ [[package]] name = "bql" version = "0.1.0" -dependencies = [ - "migration", -] [[package]] name = "chardev" @@ -141,6 +138,7 @@ checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398" name = "migration" version = "0.1.0" dependencies = [ + "bql", "common", "util", ] diff --git a/rust/bql/Cargo.toml b/rust/bql/Cargo.toml index 1041bd4ea93..d87edf4c302 100644 --- a/rust/bql/Cargo.toml +++ b/rust/bql/Cargo.toml @@ -12,9 +12,6 @@ license.workspace = true repository.workspace = true rust-version.workspace = true -[dependencies] -migration = { path = "../migration" } - [features] default = ["debug_cell"] debug_cell = [] diff --git a/rust/bql/meson.build b/rust/bql/meson.build index 7214d944089..305d7111897 100644 --- a/rust/bql/meson.build +++ b/rust/bql/meson.build @@ -36,7 +36,6 @@ _bql_rs = static_library( override_options: ['rust_std=2021', 'build.rust_std=2021'], rust_abi: 'rust', rust_args: _bql_cfg, - link_with: [_migration_rs], ) bql_rs = declare_dependency(link_with: [_bql_rs], diff --git a/rust/bql/src/cell.rs b/rust/bql/src/cell.rs index 8a0c8c14ad4..defa45a3294 100644 --- a/rust/bql/src/cell.rs +++ b/rust/bql/src/cell.rs @@ -151,8 +151,6 @@ ptr::NonNull, }; -use migration::impl_vmstate_transparent; - /// A mutable memory location that is protected by the Big QEMU Lock. /// /// # Memory layout @@ -364,8 +362,6 @@ pub fn take(&self) -> T { } } -impl_vmstate_transparent!(crate::cell::BqlCell<T> where T: VMState); - /// A mutable memory location with dynamically checked borrow rules, /// protected by the Big QEMU Lock. /// @@ -693,8 +689,6 @@ fn from(t: T) -> BqlRefCell<T> { } } -impl_vmstate_transparent!(crate::cell::BqlRefCell<T> where T: VMState); - struct BorrowRef<'b> { borrow: &'b Cell<BorrowFlag>, } diff --git a/rust/meson.build b/rust/meson.build index 0bb2a9630a1..f4fb7daf05a 100644 --- a/rust/meson.build +++ b/rust/meson.build @@ -29,8 +29,8 @@ subdir('qemu-macros') subdir('common') subdir('bits') subdir('util') -subdir('migration') subdir('bql') +subdir('migration') subdir('qom') subdir('system') subdir('chardev') diff --git a/rust/migration/Cargo.toml b/rust/migration/Cargo.toml index 708bfaaa682..f4a86275152 100644 --- a/rust/migration/Cargo.toml +++ b/rust/migration/Cargo.toml @@ -13,6 +13,7 @@ repository.workspace = true rust-version.workspace = true [dependencies] +bql = { path = "../bql" } common = { path = "../common" } util = { path = "../util" } diff --git a/rust/migration/meson.build b/rust/migration/meson.build index 2a49bd1633e..2f38da9220f 100644 --- a/rust/migration/meson.build +++ b/rust/migration/meson.build @@ -36,12 +36,12 @@ _migration_rs = static_library( ), override_options: ['rust_std=2021', 'build.rust_std=2021'], rust_abi: 'rust', - link_with: [_util_rs], + link_with: [_util_rs, _bql_rs], dependencies: [common_rs], ) migration_rs = declare_dependency(link_with: [_migration_rs], - dependencies: [migration, qemuutil]) + dependencies: [bql_rs, migration, qemuutil]) # Doctests are essentially integration tests, so they need the same dependencies. # Note that running them requires the object files for C code, so place them diff --git a/rust/migration/src/vmstate.rs b/rust/migration/src/vmstate.rs index e04b19b3c9f..05a833a8b7d 100644 --- a/rust/migration/src/vmstate.rs +++ b/rust/migration/src/vmstate.rs @@ -275,6 +275,8 @@ unsafe impl<$base> $crate::vmstate::VMState for $type where $base: $crate::vmsta }; } +impl_vmstate_transparent!(bql::BqlCell<T> where T: VMState); +impl_vmstate_transparent!(bql::BqlRefCell<T> where T: VMState); impl_vmstate_transparent!(std::cell::Cell<T> where T: VMState); impl_vmstate_transparent!(std::cell::UnsafeCell<T> where T: VMState); impl_vmstate_transparent!(std::pin::Pin<T> where T: VMState); -- 2.51.0