diff --git a/Cargo.lock b/Cargo.lock index ddd10adcd..73b3c4cac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -118,7 +118,7 @@ dependencies = [ "versionize", "versionize_derive", "vm-fdt", - "vm-memory 0.12.2", + "vm-memory", "vm-migration", "vmm-sys-util", ] @@ -339,7 +339,7 @@ dependencies = [ "versionize_derive", "virtio-bindings", "virtio-queue", - "vm-memory 0.12.2", + "vm-memory", "vm-virtio", "vmm-sys-util", ] @@ -447,7 +447,7 @@ dependencies = [ "thiserror", "tpm", "tracer", - "vm-memory 0.12.2", + "vm-memory", "vmm", "vmm-sys-util", "wait-timeout", @@ -587,7 +587,7 @@ dependencies = [ "versionize_derive", "vm-allocator", "vm-device", - "vm-memory 0.12.2", + "vm-memory", "vm-migration", "vmm-sys-util", ] @@ -974,7 +974,7 @@ dependencies = [ "serde_with", "thiserror", "vfio-ioctls", - "vm-memory 0.12.2", + "vm-memory", "vmm-sys-util", ] @@ -1155,11 +1155,11 @@ dependencies = [ [[package]] name = "linux-loader" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db6a725c8000971f83fa93ed7ee1b600e55a1471a2a653379d3c84f72effdcf" +checksum = "132a531b85b3a164012ab682c72f8f2cce7757f187be5f60782fd2b4cda9cb34" dependencies = [ - "vm-memory 0.12.2", + "vm-memory", ] [[package]] @@ -1300,7 +1300,7 @@ dependencies = [ "versionize_derive", "virtio-bindings", "virtio-queue", - "vm-memory 0.12.2", + "vm-memory", "vm-virtio", "vmm-sys-util", ] @@ -1487,7 +1487,7 @@ dependencies = [ "vfio_user", "vm-allocator", "vm-device", - "vm-memory 0.12.2", + "vm-memory", "vm-migration", "vmm-sys-util", ] @@ -2305,14 +2305,14 @@ dependencies = [ "mshv-ioctls", "thiserror", "vfio-bindings", - "vm-memory 0.13.1", + "vm-memory", "vmm-sys-util", ] [[package]] name = "vfio_user" version = "0.1.0" -source = "git+https://github.com/rust-vmm/vfio-user?branch=main#2d96b90a7279547356ad8f83aaa3115ad5497302" +source = "git+https://github.com/rust-vmm/vfio-user?branch=main#6c72e997e61d9e84b8ee691ad63ece6c717cf5aa" dependencies = [ "bitflags 1.3.2", "libc", @@ -2322,34 +2322,34 @@ dependencies = [ "serde_json", "thiserror", "vfio-bindings", - "vm-memory 0.12.2", + "vm-memory", "vmm-sys-util", ] [[package]] name = "vhost" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61957aeb36daf0b00b87fff9c10dd28a161bd35ab157553d340d183b3d8756e6" +checksum = "289adfce099c71f8310f895932ccd978f352ca494ea47496dbe20d4241888b82" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "libc", - "vm-memory 0.12.2", + "vm-memory", "vmm-sys-util", ] [[package]] name = "vhost-user-backend" -version = "0.10.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab069cdedaf18a0673766eb0a07a0f4ee3ed1b8e17fbfe4aafe5b988e2de1d01" +checksum = "61255322e3ebe93fb77d9f6d99577eca7089bbea4174076c5353a8024a463061" dependencies = [ "libc", "log", "vhost", "virtio-bindings", "virtio-queue", - "vm-memory 0.12.2", + "vm-memory", "vmm-sys-util", ] @@ -2368,7 +2368,7 @@ dependencies = [ "vhost-user-backend", "virtio-bindings", "virtio-queue", - "vm-memory 0.12.2", + "vm-memory", "vmm-sys-util", ] @@ -2386,15 +2386,15 @@ dependencies = [ "vhost", "vhost-user-backend", "virtio-bindings", - "vm-memory 0.12.2", + "vm-memory", "vmm-sys-util", ] [[package]] name = "virtio-bindings" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c18d7b74098a946470ea265b5bacbbf877abc3373021388454de0d47735a5b98" +checksum = "878bcb1b2812a10c30d53b0ed054999de3d98f25ece91fc173973f9c57aaae86" [[package]] name = "virtio-devices" @@ -2424,7 +2424,7 @@ dependencies = [ "virtio-queue", "vm-allocator", "vm-device", - "vm-memory 0.12.2", + "vm-memory", "vm-migration", "vm-virtio", "vmm-sys-util", @@ -2432,13 +2432,13 @@ dependencies = [ [[package]] name = "virtio-queue" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35aca00da06841bd99162c381ec65893cace23ca0fb89254302cfe4bec4c300f" +checksum = "73a01db2cfb6c4b9bc20608b1336263d16714ea8db05de9fec2a254e076f9385" dependencies = [ "log", "virtio-bindings", - "vm-memory 0.12.2", + "vm-memory", "vmm-sys-util", ] @@ -2448,7 +2448,7 @@ version = "0.1.0" dependencies = [ "arch", "libc", - "vm-memory 0.12.2", + "vm-memory", ] [[package]] @@ -2460,7 +2460,7 @@ dependencies = [ "serde", "thiserror", "vfio-ioctls", - "vm-memory 0.12.2", + "vm-memory", "vmm-sys-util", ] @@ -2469,24 +2469,13 @@ name = "vm-fdt" version = "0.2.0" source = "git+https://github.com/rust-vmm/vm-fdt?branch=main#77212bd0d62913e445c89376bcbbecd595afc5b1" -[[package]] -name = "vm-memory" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dc276f0d00c17b9aeb584da0f1e1c673df0d183cc2539e3636ec8cbc5eae99b" -dependencies = [ - "arc-swap", - "libc", - "thiserror", - "winapi", -] - [[package]] name = "vm-memory" version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5376c9ee5ebe2103a310d8241936cfb93c946734b0479a4fa5bdf7a64abbacd8" dependencies = [ + "arc-swap", "libc", "thiserror", "winapi", @@ -2502,7 +2491,7 @@ dependencies = [ "thiserror", "versionize", "versionize_derive", - "vm-memory 0.12.2", + "vm-memory", ] [[package]] @@ -2511,7 +2500,7 @@ version = "0.1.0" dependencies = [ "log", "virtio-queue", - "vm-memory 0.12.2", + "vm-memory", ] [[package]] @@ -2559,7 +2548,7 @@ dependencies = [ "virtio-queue", "vm-allocator", "vm-device", - "vm-memory 0.12.2", + "vm-memory", "vm-migration", "vm-virtio", "vmm-sys-util", diff --git a/Cargo.toml b/Cargo.toml index fbe9f8543..09929e582 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,7 +47,7 @@ tpm = { path = "tpm"} tracer = { path = "tracer" } vmm = { path = "vmm" } vmm-sys-util = "0.11.0" -vm-memory = "0.12.2" +vm-memory = "0.13.1" zbus = { version = "3.11.1", optional = true } # List of patched crates diff --git a/arch/Cargo.toml b/arch/Cargo.toml index a1bee72b9..7de6d03a2 100644 --- a/arch/Cargo.toml +++ b/arch/Cargo.toml @@ -14,14 +14,14 @@ anyhow = "1.0.75" byteorder = "1.4.3" hypervisor = { path = "../hypervisor" } libc = "0.2.147" -linux-loader = { version = "0.9.1", features = ["elf", "bzimage", "pe"] } +linux-loader = { version = "0.10.0", features = ["elf", "bzimage", "pe"] } log = "0.4.17" serde = { version = "1.0.168", features = ["rc", "derive"] } thiserror = "1.0.40" uuid = "1.3.4" versionize = "0.1.10" versionize_derive = "0.1.4" -vm-memory = { version = "0.12.2", features = ["backend-mmap", "backend-bitmap"] } +vm-memory = { version = "0.13.1", features = ["backend-mmap", "backend-bitmap"] } vm-migration = { path = "../vm-migration" } vmm-sys-util = { version = "0.11.0", features = ["with-serde"] } diff --git a/block/Cargo.toml b/block/Cargo.toml index 71bd1e120..d8b4ebf96 100644 --- a/block/Cargo.toml +++ b/block/Cargo.toml @@ -21,7 +21,7 @@ uuid = { version = "1.3.4", features = ["v4"] } versionize = "0.1.10" versionize_derive = "0.1.4" virtio-bindings = { version = "0.2.0", features = ["virtio-v5_0_0"] } -virtio-queue = "0.9.0" -vm-memory = { version = "0.12.2", features = ["backend-mmap", "backend-atomic", "backend-bitmap"] } +virtio-queue = "0.10.0" +vm-memory = { version = "0.13.1", features = ["backend-mmap", "backend-atomic", "backend-bitmap"] } vm-virtio = { path = "../vm-virtio" } vmm-sys-util = "0.11.0" diff --git a/devices/Cargo.toml b/devices/Cargo.toml index 76f4146ac..8c0ac8618 100644 --- a/devices/Cargo.toml +++ b/devices/Cargo.toml @@ -21,7 +21,7 @@ versionize = "0.1.10" versionize_derive = "0.1.4" vm-allocator = { path = "../vm-allocator" } vm-device = { path = "../vm-device" } -vm-memory = "0.12.2" +vm-memory = "0.13.1" vm-migration = { path = "../vm-migration" } vmm-sys-util = "0.11.0" diff --git a/fuzz/Cargo.lock b/fuzz/Cargo.lock index 3acac81e0..7c969acd1 100644 --- a/fuzz/Cargo.lock +++ b/fuzz/Cargo.lock @@ -507,9 +507,9 @@ dependencies = [ [[package]] name = "linux-loader" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db6a725c8000971f83fa93ed7ee1b600e55a1471a2a653379d3c84f72effdcf" +checksum = "132a531b85b3a164012ab682c72f8f2cce7757f187be5f60782fd2b4cda9cb34" dependencies = [ "vm-memory", ] @@ -917,7 +917,7 @@ dependencies = [ [[package]] name = "vfio-bindings" version = "0.4.0" -source = "git+https://github.com/rust-vmm/vfio?branch=main#847b0aa504ac6367efe42ba7e96a2d050737d4f0" +source = "git+https://github.com/rust-vmm/vfio?branch=main#59c604fa6e42080f0a47c124ba29454fe4cb7475" dependencies = [ "vmm-sys-util", ] @@ -925,7 +925,7 @@ dependencies = [ [[package]] name = "vfio-ioctls" version = "0.2.0" -source = "git+https://github.com/rust-vmm/vfio?branch=main#847b0aa504ac6367efe42ba7e96a2d050737d4f0" +source = "git+https://github.com/rust-vmm/vfio?branch=main#59c604fa6e42080f0a47c124ba29454fe4cb7475" dependencies = [ "byteorder", "kvm-bindings", @@ -941,7 +941,7 @@ dependencies = [ [[package]] name = "vfio_user" version = "0.1.0" -source = "git+https://github.com/rust-vmm/vfio-user?branch=main#2d96b90a7279547356ad8f83aaa3115ad5497302" +source = "git+https://github.com/rust-vmm/vfio-user?branch=main#6c72e997e61d9e84b8ee691ad63ece6c717cf5aa" dependencies = [ "bitflags 1.3.2", "libc", @@ -957,11 +957,11 @@ dependencies = [ [[package]] name = "vhost" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61957aeb36daf0b00b87fff9c10dd28a161bd35ab157553d340d183b3d8756e6" +checksum = "289adfce099c71f8310f895932ccd978f352ca494ea47496dbe20d4241888b82" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "libc", "vm-memory", "vmm-sys-util", @@ -969,9 +969,9 @@ dependencies = [ [[package]] name = "virtio-bindings" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c18d7b74098a946470ea265b5bacbbf877abc3373021388454de0d47735a5b98" +checksum = "878bcb1b2812a10c30d53b0ed054999de3d98f25ece91fc173973f9c57aaae86" [[package]] name = "virtio-devices" @@ -1009,9 +1009,9 @@ dependencies = [ [[package]] name = "virtio-queue" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35aca00da06841bd99162c381ec65893cace23ca0fb89254302cfe4bec4c300f" +checksum = "73a01db2cfb6c4b9bc20608b1336263d16714ea8db05de9fec2a254e076f9385" dependencies = [ "log", "virtio-bindings", @@ -1048,9 +1048,9 @@ source = "git+https://github.com/rust-vmm/vm-fdt?branch=main#c5a99ab71b130435927 [[package]] name = "vm-memory" -version = "0.12.2" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dc276f0d00c17b9aeb584da0f1e1c673df0d183cc2539e3636ec8cbc5eae99b" +checksum = "5376c9ee5ebe2103a310d8241936cfb93c946734b0479a4fa5bdf7a64abbacd8" dependencies = [ "arc-swap", "libc", diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index e6415eb28..2c557abce 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -14,16 +14,16 @@ devices = { path = "../devices" } epoll = "4.3.1" libc = "0.2.150" libfuzzer-sys = "0.4.7" -linux-loader = { version = "0.9.1", features = ["elf", "bzimage", "pe"] } +linux-loader = { version = "0.10.0", features = ["elf", "bzimage", "pe"] } micro_http = { git = "https://github.com/firecracker-microvm/micro-http", branch = "main" } net_util = { path = "../net_util" } once_cell = "1.18.0" seccompiler = "0.4.0" virtio-devices = { path = "../virtio-devices" } -virtio-queue = "0.9.0" +virtio-queue = "0.10.0" vmm = { path = "../vmm" } vmm-sys-util = "0.11.2" -vm-memory = "0.12.2" +vm-memory = "0.13.1" vm-device = { path = "../vm-device" } vm-virtio = { path = "../vm-virtio" } diff --git a/hypervisor/Cargo.toml b/hypervisor/Cargo.toml index bdd6e4c73..461a2ac62 100644 --- a/hypervisor/Cargo.toml +++ b/hypervisor/Cargo.toml @@ -25,7 +25,7 @@ mshv-ioctls = { git = "https://github.com/rust-vmm/mshv", branch = "main", optio serde = { version = "1.0.168", features = ["rc", "derive"] } serde_with = { version = "3.4.0", default-features = false, features = ["macros"] } vfio-ioctls = { git = "https://github.com/rust-vmm/vfio", branch = "main", default-features = false } -vm-memory = { version = "0.12.2", features = ["backend-mmap", "backend-atomic"] } +vm-memory = { version = "0.13.1", features = ["backend-mmap", "backend-atomic"] } vmm-sys-util = { version = "0.11.0", features = ["with-serde"] } thiserror = "1.0.40" diff --git a/net_util/Cargo.toml b/net_util/Cargo.toml index 8d44f7af5..bf8d0cb15 100644 --- a/net_util/Cargo.toml +++ b/net_util/Cargo.toml @@ -16,8 +16,8 @@ thiserror = "1.0.40" versionize = "0.1.10" versionize_derive = "0.1.4" virtio-bindings = "0.2.0" -virtio-queue = "0.9.0" -vm-memory = { version = "0.12.2", features = ["backend-mmap", "backend-atomic", "backend-bitmap"] } +virtio-queue = "0.10.0" +vm-memory = { version = "0.13.1", features = ["backend-mmap", "backend-atomic", "backend-bitmap"] } vm-virtio = { path = "../vm-virtio" } vmm-sys-util = "0.11.0" diff --git a/pci/Cargo.toml b/pci/Cargo.toml index 3ed26e646..c7cd3c81c 100644 --- a/pci/Cargo.toml +++ b/pci/Cargo.toml @@ -26,5 +26,5 @@ versionize = "0.1.10" versionize_derive = "0.1.4" vm-allocator = { path = "../vm-allocator" } vm-device = { path = "../vm-device" } -vm-memory = { version = "0.12.2", features = ["backend-mmap", "backend-atomic", "backend-bitmap"] } +vm-memory = { version = "0.13.1", features = ["backend-mmap", "backend-atomic", "backend-bitmap"] } vm-migration = { path = "../vm-migration" } diff --git a/vhost_user_block/Cargo.toml b/vhost_user_block/Cargo.toml index dd0fe2b8a..750d05255 100644 --- a/vhost_user_block/Cargo.toml +++ b/vhost_user_block/Cargo.toml @@ -13,10 +13,9 @@ epoll = "4.3.3" libc = "0.2.147" log = "0.4.17" option_parser = { path = "../option_parser" } -vhost = { version = "0.8.1", features = ["vhost-user-slave"] } -vhost-user-backend = "0.10.1" +vhost = { version = "0.9.0", features = ["vhost-user-backend"] } +vhost-user-backend = "0.11.0" virtio-bindings = "0.2.0" -virtio-queue = "0.9.0" -vm-memory = "0.12.2" +virtio-queue = "0.10.0" +vm-memory = "0.13.1" vmm-sys-util = "0.11.0" - diff --git a/vhost_user_block/src/lib.rs b/vhost_user_block/src/lib.rs index 3e7d11628..93c020097 100644 --- a/vhost_user_block/src/lib.rs +++ b/vhost_user_block/src/lib.rs @@ -299,9 +299,10 @@ impl VhostUserBlkBackend { } } -impl VhostUserBackendMut>, AtomicBitmap> - for VhostUserBlkBackend -{ +impl VhostUserBackendMut for VhostUserBlkBackend { + type Bitmap = AtomicBitmap; + type Vring = VringRwLock>; + fn num_queues(&self) -> usize { self.config.num_queues as usize } @@ -350,7 +351,7 @@ impl VhostUserBackendMut>, Atomic evset: EventSet, vrings: &[VringRwLock>], thread_id: usize, - ) -> VhostUserBackendResult { + ) -> VhostUserBackendResult<()> { if evset != EventSet::IN { return Err(Error::HandleEventNotEpollIn.into()); } @@ -394,7 +395,7 @@ impl VhostUserBackendMut>, Atomic thread.process_queue(&mut vring); } - Ok(false) + Ok(()) } _ => Err(Error::HandleEventUnknownEvent.into()), } diff --git a/vhost_user_net/Cargo.toml b/vhost_user_net/Cargo.toml index 3d72b4be5..acfefc3cf 100644 --- a/vhost_user_net/Cargo.toml +++ b/vhost_user_net/Cargo.toml @@ -13,9 +13,9 @@ libc = "0.2.147" log = "0.4.17" net_util = { path = "../net_util" } option_parser = { path = "../option_parser" } -vhost = { version = "0.8.1", features = ["vhost-user-slave"] } -vhost-user-backend = "0.10.1" +vhost = { version = "0.9.0", features = ["vhost-user-backend"] } +vhost-user-backend = "0.11.0" virtio-bindings = "0.2.0" -vm-memory = "0.12.2" +vm-memory = "0.13.1" vmm-sys-util = "0.11.0" diff --git a/vhost_user_net/src/lib.rs b/vhost_user_net/src/lib.rs index 6ed332d76..cd4188460 100644 --- a/vhost_user_net/src/lib.rs +++ b/vhost_user_net/src/lib.rs @@ -158,9 +158,10 @@ impl VhostUserNetBackend { } } -impl VhostUserBackendMut>, AtomicBitmap> - for VhostUserNetBackend -{ +impl VhostUserBackendMut for VhostUserNetBackend { + type Bitmap = AtomicBitmap; + type Vring = VringRwLock>; + fn num_queues(&self) -> usize { self.num_queues } @@ -203,7 +204,7 @@ impl VhostUserBackendMut>, Atomic _evset: EventSet, vrings: &[VringRwLock>], thread_id: usize, - ) -> VhostUserBackendResult { + ) -> VhostUserBackendResult<()> { let mut thread = self.threads[thread_id].lock().unwrap(); match device_event { 0 => { @@ -245,7 +246,7 @@ impl VhostUserBackendMut>, Atomic _ => return Err(Error::HandleEventUnknownEvent.into()), } - Ok(false) + Ok(()) } fn exit_event(&self, thread_index: usize) -> Option { diff --git a/virtio-devices/Cargo.toml b/virtio-devices/Cargo.toml index 75620f3e3..728307ddc 100644 --- a/virtio-devices/Cargo.toml +++ b/virtio-devices/Cargo.toml @@ -27,12 +27,12 @@ serial_buffer = { path = "../serial_buffer" } thiserror = "1.0.40" versionize = "0.1.10" versionize_derive = "0.1.4" -vhost = { version = "0.8.1", features = ["vhost-user-master", "vhost-user-slave", "vhost-kern", "vhost-vdpa"] } +vhost = { version = "0.9.0", features = ["vhost-user-frontend", "vhost-user-backend", "vhost-kern", "vhost-vdpa"] } virtio-bindings = { version = "0.2.0", features = ["virtio-v5_0_0"] } -virtio-queue = "0.9.0" +virtio-queue = "0.10.0" vm-allocator = { path = "../vm-allocator" } vm-device = { path = "../vm-device" } -vm-memory = { version = "0.12.2", features = ["backend-mmap", "backend-atomic", "backend-bitmap"] } +vm-memory = { version = "0.13.1", features = ["backend-mmap", "backend-atomic", "backend-bitmap"] } vm-migration = { path = "../vm-migration" } vm-virtio = { path = "../vm-virtio" } vmm-sys-util = "0.11.0" diff --git a/virtio-devices/src/vhost_user/blk.rs b/virtio-devices/src/vhost_user/blk.rs index 88339f737..5e3e10f1f 100644 --- a/virtio-devices/src/vhost_user/blk.rs +++ b/virtio-devices/src/vhost_user/blk.rs @@ -23,7 +23,7 @@ use vhost::vhost_user::message::{ VhostUserConfigFlags, VhostUserProtocolFeatures, VhostUserVirtioFeatures, VHOST_USER_CONFIG_OFFSET, }; -use vhost::vhost_user::{MasterReqHandler, VhostUserMaster, VhostUserMasterReqHandler}; +use vhost::vhost_user::{FrontendReqHandler, VhostUserFrontend, VhostUserFrontendReqHandler}; use virtio_bindings::virtio_blk::{ VIRTIO_BLK_F_BLK_SIZE, VIRTIO_BLK_F_CONFIG_WCE, VIRTIO_BLK_F_DISCARD, VIRTIO_BLK_F_FLUSH, VIRTIO_BLK_F_GEOMETRY, VIRTIO_BLK_F_MQ, VIRTIO_BLK_F_RO, VIRTIO_BLK_F_SEG_MAX, @@ -50,8 +50,8 @@ pub struct State { impl VersionMapped for State {} -struct SlaveReqHandler {} -impl VhostUserMasterReqHandler for SlaveReqHandler {} +struct BackendReqHandler {} +impl VhostUserFrontendReqHandler for BackendReqHandler {} pub struct Blk { common: VirtioCommon, @@ -294,7 +294,7 @@ impl VirtioDevice for Blk { self.common.activate(&queues, &interrupt_cb)?; self.guest_memory = Some(mem.clone()); - let slave_req_handler: Option> = None; + let backend_req_handler: Option> = None; // Run a dedicated thread for handling potential reconnections with // the backend. @@ -305,7 +305,7 @@ impl VirtioDevice for Blk { queues, interrupt_cb, self.common.acked_features, - slave_req_handler, + backend_req_handler, kill_evt, pause_evt, )?; diff --git a/virtio-devices/src/vhost_user/fs.rs b/virtio-devices/src/vhost_user/fs.rs index 517a54913..63d79444b 100644 --- a/virtio-devices/src/vhost_user/fs.rs +++ b/virtio-devices/src/vhost_user/fs.rs @@ -22,11 +22,11 @@ use std::thread; use versionize::{VersionMap, Versionize, VersionizeResult}; use versionize_derive::Versionize; use vhost::vhost_user::message::{ - VhostUserFSSlaveMsg, VhostUserFSSlaveMsgFlags, VhostUserProtocolFeatures, - VhostUserVirtioFeatures, VHOST_USER_FS_SLAVE_ENTRIES, + VhostUserFSBackendMsg, VhostUserFSBackendMsgFlags, VhostUserProtocolFeatures, + VhostUserVirtioFeatures, VHOST_USER_FS_BACKEND_ENTRIES, }; use vhost::vhost_user::{ - HandlerResult, MasterReqHandler, VhostUserMaster, VhostUserMasterReqHandler, + FrontendReqHandler, HandlerResult, VhostUserFrontend, VhostUserFrontendReqHandler, }; use virtio_queue::Queue; use vm_memory::{ @@ -48,19 +48,19 @@ pub struct State { pub config: VirtioFsConfig, pub acked_protocol_features: u64, pub vu_num_queues: usize, - pub slave_req_support: bool, + pub backend_req_support: bool, } impl VersionMapped for State {} -struct SlaveReqHandler { +struct BackendReqHandler { cache_offset: GuestAddress, cache_size: u64, mmap_cache_addr: u64, mem: GuestMemoryAtomic, } -impl SlaveReqHandler { +impl BackendReqHandler { // Make sure request is within cache range fn is_req_valid(&self, offset: u64, len: u64) -> bool { let end = match offset.checked_add(len) { @@ -72,16 +72,16 @@ impl SlaveReqHandler { } } -impl VhostUserMasterReqHandler for SlaveReqHandler { +impl VhostUserFrontendReqHandler for BackendReqHandler { fn handle_config_change(&self) -> HandlerResult { debug!("handle_config_change"); Ok(0) } - fn fs_slave_map(&self, fs: &VhostUserFSSlaveMsg, fd: &dyn AsRawFd) -> HandlerResult { - debug!("fs_slave_map"); + fn fs_backend_map(&self, fs: &VhostUserFSBackendMsg, fd: &dyn AsRawFd) -> HandlerResult { + debug!("fs_backend_map"); - for i in 0..VHOST_USER_FS_SLAVE_ENTRIES { + for i in 0..VHOST_USER_FS_BACKEND_ENTRIES { let offset = fs.cache_offset[i]; let len = fs.len[i]; @@ -115,10 +115,10 @@ impl VhostUserMasterReqHandler for SlaveReqHandler { Ok(0) } - fn fs_slave_unmap(&self, fs: &VhostUserFSSlaveMsg) -> HandlerResult { - debug!("fs_slave_unmap"); + fn fs_backend_unmap(&self, fs: &VhostUserFSBackendMsg) -> HandlerResult { + debug!("fs_backend_unmap"); - for i in 0..VHOST_USER_FS_SLAVE_ENTRIES { + for i in 0..VHOST_USER_FS_BACKEND_ENTRIES { let mut len = fs.len[i]; // Ignore if the length is 0. @@ -126,7 +126,7 @@ impl VhostUserMasterReqHandler for SlaveReqHandler { continue; } - // Need to handle a special case where the slave ask for the unmapping + // Need to handle a special case where the backend ask for the unmapping // of the entire mapping. let offset = if len == 0xffff_ffff_ffff_ffff { len = self.cache_size; @@ -159,10 +159,10 @@ impl VhostUserMasterReqHandler for SlaveReqHandler { Ok(0) } - fn fs_slave_sync(&self, fs: &VhostUserFSSlaveMsg) -> HandlerResult { - debug!("fs_slave_sync"); + fn fs_backend_sync(&self, fs: &VhostUserFSBackendMsg) -> HandlerResult { + debug!("fs_backend_sync"); - for i in 0..VHOST_USER_FS_SLAVE_ENTRIES { + for i in 0..VHOST_USER_FS_BACKEND_ENTRIES { let offset = fs.cache_offset[i]; let len = fs.len[i]; @@ -187,11 +187,11 @@ impl VhostUserMasterReqHandler for SlaveReqHandler { Ok(0) } - fn fs_slave_io(&self, fs: &VhostUserFSSlaveMsg, fd: &dyn AsRawFd) -> HandlerResult { - debug!("fs_slave_io"); + fn fs_backend_io(&self, fs: &VhostUserFSBackendMsg, fd: &dyn AsRawFd) -> HandlerResult { + debug!("fs_backend_io"); let mut done: u64 = 0; - for i in 0..VHOST_USER_FS_SLAVE_ENTRIES { + for i in 0..VHOST_USER_FS_BACKEND_ENTRIES { // Ignore if the length is 0. if fs.len[i] == 0 { continue; @@ -230,8 +230,8 @@ impl VhostUserMasterReqHandler for SlaveReqHandler { }; while len > 0 { - let ret = if (fs.flags[i] & VhostUserFSSlaveMsgFlags::MAP_W) - == VhostUserFSSlaveMsgFlags::MAP_W + let ret = if (fs.flags[i] & VhostUserFSBackendMsgFlags::MAP_W) + == VhostUserFSBackendMsgFlags::MAP_W { debug!("write: foffset={}, len={}", foffset, len); // SAFETY: FFI call with valid arguments @@ -298,7 +298,7 @@ pub struct Fs { // Hold ownership of the memory that is allocated for the device // which will be automatically dropped when the device is dropped cache: Option<(VirtioSharedMemoryList, MmapRegion)>, - slave_req_support: bool, + backend_req_support: bool, seccomp_action: SeccompAction, guest_memory: Option>, epoll_thread: Option>, @@ -321,7 +321,7 @@ impl Fs { iommu: bool, state: Option, ) -> Result { - let mut slave_req_support = false; + let mut backend_req_support = false; // Calculate the actual number of queues needed. let num_queues = NUM_QUEUE_OFFSET + req_num_queues; @@ -335,7 +335,7 @@ impl Fs { acked_protocol_features, vu_num_queues, config, - slave_req_support, + backend_req_support, paused, ) = if let Some(state) = state { info!("Restoring vhost-user-fs {}", id); @@ -351,7 +351,7 @@ impl Fs { state.acked_protocol_features, state.vu_num_queues, state.config, - state.slave_req_support, + state.backend_req_support, true, ) } else { @@ -363,10 +363,10 @@ impl Fs { | VhostUserProtocolFeatures::REPLY_ACK | VhostUserProtocolFeatures::INFLIGHT_SHMFD | VhostUserProtocolFeatures::LOG_SHMFD; - let slave_protocol_features = - VhostUserProtocolFeatures::SLAVE_REQ | VhostUserProtocolFeatures::SLAVE_SEND_FD; + let backend_protocol_features = + VhostUserProtocolFeatures::BACKEND_REQ | VhostUserProtocolFeatures::BACKEND_SEND_FD; if cache.is_some() { - avail_protocol_features |= slave_protocol_features; + avail_protocol_features |= backend_protocol_features; } let (acked_features, acked_protocol_features) = @@ -389,10 +389,10 @@ impl Fs { return Err(Error::BadQueueNum); } - if acked_protocol_features & slave_protocol_features.bits() - == slave_protocol_features.bits() + if acked_protocol_features & backend_protocol_features.bits() + == backend_protocol_features.bits() { - slave_req_support = true; + backend_req_support = true; } // Create virtio-fs device configuration. @@ -411,7 +411,7 @@ impl Fs { acked_protocol_features, num_queues, config, - slave_req_support, + backend_req_support, false, ) }; @@ -437,7 +437,7 @@ impl Fs { id, config, cache, - slave_req_support, + backend_req_support, seccomp_action, guest_memory: None, epoll_thread: None, @@ -453,7 +453,7 @@ impl Fs { config: self.config, acked_protocol_features: self.vu_common.acked_protocol_features, vu_num_queues: self.vu_common.vu_num_queues, - slave_req_support: self.slave_req_support, + backend_req_support: self.backend_req_support, } } } @@ -507,10 +507,10 @@ impl VirtioDevice for Fs { self.common.activate(&queues, &interrupt_cb)?; self.guest_memory = Some(mem.clone()); - // Initialize slave communication. - let slave_req_handler = if self.slave_req_support { + // Initialize backend communication. + let backend_req_handler = if self.backend_req_support { if let Some(cache) = self.cache.as_ref() { - let vu_master_req_handler = Arc::new(SlaveReqHandler { + let vu_frontend_req_handler = Arc::new(BackendReqHandler { cache_offset: cache.0.addr, cache_size: cache.0.len, mmap_cache_addr: cache.0.host_addr, @@ -518,8 +518,8 @@ impl VirtioDevice for Fs { }); let mut req_handler = - MasterReqHandler::new(vu_master_req_handler).map_err(|e| { - ActivateError::VhostUserFsSetup(Error::MasterReqHandlerCreation(e)) + FrontendReqHandler::new(vu_frontend_req_handler).map_err(|e| { + ActivateError::VhostUserFsSetup(Error::FrontendReqHandlerCreation(e)) })?; if self.vu_common.acked_protocol_features @@ -546,7 +546,7 @@ impl VirtioDevice for Fs { queues, interrupt_cb, self.common.acked_features, - slave_req_handler, + backend_req_handler, kill_evt, pause_evt, )?; diff --git a/virtio-devices/src/vhost_user/mod.rs b/virtio-devices/src/vhost_user/mod.rs index 2dee7324a..a4f56c31f 100644 --- a/virtio-devices/src/vhost_user/mod.rs +++ b/virtio-devices/src/vhost_user/mod.rs @@ -17,7 +17,7 @@ use versionize::Versionize; use vhost::vhost_user::message::{ VhostUserInflight, VhostUserProtocolFeatures, VhostUserVirtioFeatures, }; -use vhost::vhost_user::{MasterReqHandler, VhostUserMasterReqHandler}; +use vhost::vhost_user::{FrontendReqHandler, VhostUserFrontendReqHandler}; use vhost::Error as VhostError; use virtio_queue::Error as QueueError; use virtio_queue::Queue; @@ -61,8 +61,8 @@ pub enum Error { MemoryRegions(MmapError), #[error("Failed removing socket path: {0}")] RemoveSocketPath(io::Error), - #[error("Failed to create master: {0}")] - VhostUserCreateMaster(VhostError), + #[error("Failed to create frontend: {0}")] + VhostUserCreateFrontend(VhostError), #[error("Failed to open vhost device: {0}")] VhostUserOpen(VhostError), #[error("Connection to socket failed")] @@ -105,10 +105,10 @@ pub enum Error { VhostIrqRead(io::Error), #[error("Failed to read vhost eventfd: {0}")] VhostUserMemoryRegion(MmapError), - #[error("Failed to create the master request handler from slave: {0}")] - MasterReqHandlerCreation(vhost::vhost_user::Error), - #[error("Set slave request fd failed: {0}")] - VhostUserSetSlaveRequestFd(vhost::Error), + #[error("Failed to create the frontend request handler from backend: {0}")] + FrontendReqHandlerCreation(vhost::vhost_user::Error), + #[error("Set backend request fd failed: {0}")] + VhostUserSetBackendRequestFd(vhost::Error), #[error("Add memory region failed: {0}")] VhostUserAddMemReg(VhostError), #[error("Failed getting the configuration: {0}")] @@ -155,7 +155,7 @@ pub const DEFAULT_VIRTIO_FEATURES: u64 = 1 << VIRTIO_F_RING_INDIRECT_DESC | VhostUserVirtioFeatures::PROTOCOL_FEATURES.bits(); const HUP_CONNECTION_EVENT: u16 = EPOLL_HELPER_EVENT_LAST + 1; -const SLAVE_REQ_EVENT: u16 = EPOLL_HELPER_EVENT_LAST + 2; +const BACKEND_REQ_EVENT: u16 = EPOLL_HELPER_EVENT_LAST + 2; #[derive(Default)] pub struct Inflight { @@ -163,7 +163,7 @@ pub struct Inflight { pub fd: Option, } -pub struct VhostUserEpollHandler { +pub struct VhostUserEpollHandler { pub vu: Arc>, pub mem: GuestMemoryAtomic, pub kill_evt: EventFd, @@ -174,11 +174,11 @@ pub struct VhostUserEpollHandler { pub acked_protocol_features: u64, pub socket_path: String, pub server: bool, - pub slave_req_handler: Option>, + pub backend_req_handler: Option>, pub inflight: Option, } -impl VhostUserEpollHandler { +impl VhostUserEpollHandler { pub fn run( &mut self, paused: Arc, @@ -191,8 +191,8 @@ impl VhostUserEpollHandler { epoll::Events::EPOLLHUP, )?; - if let Some(slave_req_handler) = &self.slave_req_handler { - helper.add_event(slave_req_handler.as_raw_fd(), SLAVE_REQ_EVENT)?; + if let Some(backend_req_handler) = &self.backend_req_handler { + helper.add_event(backend_req_handler.as_raw_fd(), BACKEND_REQ_EVENT)?; } helper.run(paused, paused_sync, self)?; @@ -231,7 +231,7 @@ impl VhostUserEpollHandler { &self.virtio_interrupt, self.acked_features, self.acked_protocol_features, - &self.slave_req_handler, + &self.backend_req_handler, self.inflight.as_mut(), ) .map_err(|e| { @@ -255,7 +255,7 @@ impl VhostUserEpollHandler { } } -impl EpollHelperHandler for VhostUserEpollHandler { +impl EpollHelperHandler for VhostUserEpollHandler { fn handle_event( &mut self, helper: &mut EpollHelper, @@ -271,9 +271,9 @@ impl EpollHelperHandler for VhostUserEpollHandler< )) })?; } - SLAVE_REQ_EVENT => { - if let Some(slave_req_handler) = self.slave_req_handler.as_mut() { - slave_req_handler.handle_request().map_err(|e| { + BACKEND_REQ_EVENT => { + if let Some(backend_req_handler) = self.backend_req_handler.as_mut() { + backend_req_handler.handle_request().map_err(|e| { EpollHelperError::HandleEvent(anyhow!( "Failed to handle request from vhost-user backend: {:?}", e @@ -304,13 +304,13 @@ pub struct VhostUserCommon { impl VhostUserCommon { #[allow(clippy::too_many_arguments)] - pub fn activate( + pub fn activate( &mut self, mem: GuestMemoryAtomic, queues: Vec<(usize, Queue, EventFd)>, interrupt_cb: Arc, acked_features: u64, - slave_req_handler: Option>, + backend_req_handler: Option>, kill_evt: EventFd, pause_evt: EventFd, ) -> std::result::Result, ActivateError> { @@ -337,7 +337,7 @@ impl VhostUserCommon { .collect(), &interrupt_cb, acked_features, - &slave_req_handler, + &backend_req_handler, inflight.as_mut(), ) .map_err(ActivateError::VhostUserSetup)?; @@ -353,7 +353,7 @@ impl VhostUserCommon { acked_protocol_features: self.acked_protocol_features, socket_path: self.socket_path.clone(), server: self.server, - slave_req_handler, + backend_req_handler, inflight, }) } diff --git a/virtio-devices/src/vhost_user/net.rs b/virtio-devices/src/vhost_user/net.rs index f51ec4399..6c413eef6 100644 --- a/virtio-devices/src/vhost_user/net.rs +++ b/virtio-devices/src/vhost_user/net.rs @@ -20,7 +20,7 @@ use std::vec::Vec; use versionize::{VersionMap, Versionize, VersionizeResult}; use versionize_derive::Versionize; use vhost::vhost_user::message::{VhostUserProtocolFeatures, VhostUserVirtioFeatures}; -use vhost::vhost_user::{MasterReqHandler, VhostUserMaster, VhostUserMasterReqHandler}; +use vhost::vhost_user::{FrontendReqHandler, VhostUserFrontend, VhostUserFrontendReqHandler}; use virtio_bindings::virtio_net::{ VIRTIO_NET_F_CSUM, VIRTIO_NET_F_CTRL_VQ, VIRTIO_NET_F_GUEST_CSUM, VIRTIO_NET_F_GUEST_ECN, VIRTIO_NET_F_GUEST_TSO4, VIRTIO_NET_F_GUEST_TSO6, VIRTIO_NET_F_GUEST_UFO, @@ -49,8 +49,8 @@ pub struct State { impl VersionMapped for State {} -struct SlaveReqHandler {} -impl VhostUserMasterReqHandler for SlaveReqHandler {} +struct BackendReqHandler {} +impl VhostUserFrontendReqHandler for BackendReqHandler {} pub struct Net { common: VirtioCommon, @@ -342,7 +342,7 @@ impl VirtioDevice for Net { self.ctrl_queue_epoll_thread = Some(epoll_threads.remove(0)); } - let slave_req_handler: Option> = None; + let backend_req_handler: Option> = None; // The backend acknowledged features must not contain VIRTIO_NET_F_MAC // since we don't expect the backend to handle it. @@ -357,7 +357,7 @@ impl VirtioDevice for Net { queues, interrupt_cb, backend_acked_features, - slave_req_handler, + backend_req_handler, kill_evt, pause_evt, )?; diff --git a/virtio-devices/src/vhost_user/vu_common_ctrl.rs b/virtio-devices/src/vhost_user/vu_common_ctrl.rs index cf400798b..6f980f23d 100644 --- a/virtio-devices/src/vhost_user/vu_common_ctrl.rs +++ b/virtio-devices/src/vhost_user/vu_common_ctrl.rs @@ -20,7 +20,9 @@ use vhost::vhost_kern::vhost_binding::{VHOST_F_LOG_ALL, VHOST_VRING_F_LOG}; use vhost::vhost_user::message::{ VhostUserHeaderFlag, VhostUserInflight, VhostUserProtocolFeatures, VhostUserVirtioFeatures, }; -use vhost::vhost_user::{Master, MasterReqHandler, VhostUserMaster, VhostUserMasterReqHandler}; +use vhost::vhost_user::{ + Frontend, FrontendReqHandler, VhostUserFrontend, VhostUserFrontendReqHandler, +}; use vhost::{VhostBackend, VhostUserDirtyLogRegion, VhostUserMemoryRegionInfo, VringConfigData}; use virtio_queue::{Descriptor, Queue, QueueT}; use vm_memory::{ @@ -47,7 +49,7 @@ struct VringInfo { #[derive(Clone)] pub struct VhostUserHandle { - vu: Master, + vu: Frontend, ready: bool, supports_migration: bool, shm_log: Option>, @@ -148,13 +150,13 @@ impl VhostUserHandle { } #[allow(clippy::too_many_arguments)] - pub fn setup_vhost_user( + pub fn setup_vhost_user( &mut self, mem: &GuestMemoryMmap, queues: Vec<(usize, Queue, EventFd)>, virtio_interrupt: &Arc, acked_features: u64, - slave_req_handler: &Option>, + backend_req_handler: &Option>, inflight: Option<&mut Inflight>, ) -> Result<()> { self.vu @@ -266,10 +268,10 @@ impl VhostUserHandle { self.enable_vhost_user_vrings(self.queue_indexes.clone(), true)?; - if let Some(slave_req_handler) = slave_req_handler { + if let Some(backend_req_handler) = backend_req_handler { self.vu - .set_slave_request_fd(&slave_req_handler.get_tx_raw_fd()) - .map_err(Error::VhostUserSetSlaveRequestFd)?; + .set_backend_request_fd(&backend_req_handler.get_tx_raw_fd()) + .map_err(Error::VhostUserSetBackendRequestFd)?; } self.vrings_info = Some(vrings_info); @@ -333,14 +335,14 @@ impl VhostUserHandle { } #[allow(clippy::too_many_arguments)] - pub fn reinitialize_vhost_user( + pub fn reinitialize_vhost_user( &mut self, mem: &GuestMemoryMmap, queues: Vec<(usize, Queue, EventFd)>, virtio_interrupt: &Arc, acked_features: u64, acked_protocol_features: u64, - slave_req_handler: &Option>, + backend_req_handler: &Option>, inflight: Option<&mut Inflight>, ) -> Result<()> { self.set_protocol_features_vhost_user(acked_features, acked_protocol_features)?; @@ -350,7 +352,7 @@ impl VhostUserHandle { queues, virtio_interrupt, acked_features, - slave_req_handler, + backend_req_handler, inflight, ) } @@ -372,7 +374,7 @@ impl VhostUserHandle { let (stream, _) = listener.accept().map_err(Error::AcceptConnection)?; Ok(VhostUserHandle { - vu: Master::from_stream(stream, num_queues), + vu: Frontend::from_stream(stream, num_queues), ready: false, supports_migration: false, shm_log: None, @@ -385,7 +387,7 @@ impl VhostUserHandle { // Retry connecting for a full minute let err = loop { - let err = match Master::connect(socket_path, num_queues) { + let err = match Frontend::connect(socket_path, num_queues) { Ok(m) => { return Ok(VhostUserHandle { vu: m, @@ -414,7 +416,7 @@ impl VhostUserHandle { } } - pub fn socket_handle(&mut self) -> &mut Master { + pub fn socket_handle(&mut self) -> &mut Frontend { &mut self.vu } diff --git a/vm-allocator/Cargo.toml b/vm-allocator/Cargo.toml index 136007f85..affbdb143 100644 --- a/vm-allocator/Cargo.toml +++ b/vm-allocator/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] libc = "0.2.147" -vm-memory = "0.12.2" +vm-memory = "0.13.1" [target.'cfg(target_arch = "aarch64")'.dependencies] arch = { path = "../arch" } diff --git a/vm-device/Cargo.toml b/vm-device/Cargo.toml index a20dab8c6..da58832f5 100644 --- a/vm-device/Cargo.toml +++ b/vm-device/Cargo.toml @@ -15,6 +15,5 @@ hypervisor = { path = "../hypervisor" } thiserror = "1.0.40" serde = { version = "1.0.168", features = ["rc", "derive"] } vfio-ioctls = { git = "https://github.com/rust-vmm/vfio", branch = "main", default-features = false } -vm-memory = { version = "0.12.2", features = ["backend-mmap"] } +vm-memory = { version = "0.13.1", features = ["backend-mmap"] } vmm-sys-util = "0.11.0" - diff --git a/vm-migration/Cargo.toml b/vm-migration/Cargo.toml index 8c74d38ed..7099b917d 100644 --- a/vm-migration/Cargo.toml +++ b/vm-migration/Cargo.toml @@ -11,4 +11,4 @@ serde = { version = "1.0.168", features = ["rc", "derive"] } serde_json = "1.0.107" versionize = "0.1.10" versionize_derive = "0.1.4" -vm-memory = { version = "0.12.2", features = ["backend-mmap", "backend-atomic"] } +vm-memory = { version = "0.13.1", features = ["backend-mmap", "backend-atomic"] } diff --git a/vm-virtio/Cargo.toml b/vm-virtio/Cargo.toml index 8fceba6e6..ae6d4acf0 100644 --- a/vm-virtio/Cargo.toml +++ b/vm-virtio/Cargo.toml @@ -9,5 +9,5 @@ default = [] [dependencies] log = "0.4.17" -virtio-queue = "0.9.0" -vm-memory = { version = "0.12.2", features = ["backend-mmap", "backend-atomic", "backend-bitmap"] } +virtio-queue = "0.10.0" +vm-memory = { version = "0.13.1", features = ["backend-mmap", "backend-atomic", "backend-bitmap"] } diff --git a/vmm/Cargo.toml b/vmm/Cargo.toml index 18803458f..802169639 100644 --- a/vmm/Cargo.toml +++ b/vmm/Cargo.toml @@ -34,7 +34,7 @@ gdbstub = { version = "0.6.4", optional = true } gdbstub_arch = { version = "0.2.4", optional = true } hypervisor = { path = "../hypervisor" } libc = "0.2.147" -linux-loader = { version = "0.9.1", features = ["elf", "bzimage", "pe"] } +linux-loader = { version = "0.10.0", features = ["elf", "bzimage", "pe"] } log = "0.4.17" micro_http = { git = "https://github.com/firecracker-microvm/micro-http", branch = "main" } net_util = { path = "../net_util" } @@ -54,10 +54,10 @@ versionize_derive = "0.1.4" vfio-ioctls = { git = "https://github.com/rust-vmm/vfio", branch = "main", default-features = false } vfio_user = { git = "https://github.com/rust-vmm/vfio-user", branch = "main" } virtio-devices = { path = "../virtio-devices" } -virtio-queue = "0.9.0" +virtio-queue = "0.10.0" vm-allocator = { path = "../vm-allocator" } vm-device = { path = "../vm-device" } -vm-memory = { version = "0.12.2", features = ["backend-mmap", "backend-atomic", "backend-bitmap"] } +vm-memory = { version = "0.13.1", features = ["backend-mmap", "backend-atomic", "backend-bitmap"] } vm-migration = { path = "../vm-migration" } vm-virtio = { path = "../vm-virtio" } vmm-sys-util = { version = "0.11.0", features = ["with-serde"] }