From 42700ec75b8a746ba5b9a2f255f71513afca656f Mon Sep 17 00:00:00 2001 From: Zhang Junyu Date: Sat, 28 Feb 2026 23:02:27 +0800 Subject: [PATCH 1/9] refine: Separate vm-mm as a crate --- Cargo.lock | 14 ++++++++++++++ Cargo.toml | 1 + crates/vm-bootloader/Cargo.toml | 1 + crates/vm-bootloader/src/boot_loader.rs | 2 +- .../vm-bootloader/src/boot_loader/arch/aarch64.rs | 4 ++-- .../vm-bootloader/src/boot_loader/arch/x86_64.rs | 2 +- crates/vm-bootloader/src/initrd_loader.rs | 4 ++-- crates/vm-bootloader/src/kernel_loader.rs | 2 +- .../src/kernel_loader/linux/bzimage.rs | 4 ++-- .../vm-bootloader/src/kernel_loader/linux/image.rs | 4 ++-- crates/vm-core/Cargo.toml | 1 + crates/vm-core/src/lib.rs | 1 - crates/vm-core/src/virt.rs | 5 +++-- crates/vm-core/src/virt/hvp.rs | 2 +- crates/vm-core/src/virt/hvp/mm.rs | 7 +++---- crates/vm-core/src/virt/kvm.rs | 4 ++-- crates/vm-device/Cargo.toml | 1 + crates/vm-device/src/device/virtio/virtio_blk.rs | 4 ++-- .../vm-device/src/device/virtio/virtio_mmio_kbd.rs | 4 ++-- crates/vm-machine/Cargo.toml | 1 + crates/vm-machine/src/device.rs | 4 ++-- crates/vm-machine/src/firmware/bios.rs | 4 ++-- crates/vm-machine/src/vm.rs | 6 +++--- crates/vm-mm/Cargo.toml | 9 +++++++++ crates/{vm-core/src/mm => vm-mm/src}/allocator.rs | 2 +- .../mm => vm-mm/src}/allocator/mmap_allocator.rs | 6 +++--- crates/{vm-core/src/mm.rs => vm-mm/src/error.rs} | 4 ---- crates/vm-mm/src/lib.rs | 4 ++++ crates/{vm-core/src/mm => vm-mm/src}/manager.rs | 12 ++++++------ crates/{vm-core/src/mm => vm-mm/src}/region.rs | 6 +++--- crates/vm-virtio/Cargo.toml | 1 + crates/vm-virtio/src/virt_queue.rs | 4 ++-- .../vm-virtio/src/virt_queue/virtq_desc_table.rs | 4 ++-- 33 files changed, 81 insertions(+), 53 deletions(-) create mode 100644 crates/vm-mm/Cargo.toml rename crates/{vm-core/src/mm => vm-mm/src}/allocator.rs (91%) rename crates/{vm-core/src/mm => vm-mm/src}/allocator/mmap_allocator.rs (84%) rename crates/{vm-core/src/mm.rs => vm-mm/src/error.rs} (89%) create mode 100644 crates/vm-mm/src/lib.rs rename crates/{vm-core/src/mm => vm-mm/src}/manager.rs (95%) rename crates/{vm-core/src/mm => vm-mm/src}/region.rs (90%) diff --git a/Cargo.lock b/Cargo.lock index f938d5f..dae74ae 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -642,6 +642,7 @@ dependencies = [ "tracing", "vm-core", "vm-fdt", + "vm-mm", "zerocopy", ] @@ -679,6 +680,7 @@ dependencies = [ "thiserror", "tracing", "vm-fdt", + "vm-mm", ] [[package]] @@ -695,6 +697,7 @@ dependencies = [ "tracing", "vm-core", "vm-fdt", + "vm-mm", "vm-pci", "vm-virtio", "zerocopy", @@ -720,10 +723,20 @@ dependencies = [ "vm-bootloader", "vm-core", "vm-device", + "vm-mm", "vm-pci", "vm-virtio", ] +[[package]] +name = "vm-mm" +version = "0.1.0" +dependencies = [ + "anyhow", + "memmap2", + "thiserror", +] + [[package]] name = "vm-pci" version = "0.1.0" @@ -748,6 +761,7 @@ dependencies = [ "tracing", "vm-core", "vm-fdt", + "vm-mm", "vm-pci", "zerocopy", ] diff --git a/Cargo.toml b/Cargo.toml index 2fd2ce7..7617f42 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,6 +28,7 @@ vm-core = { path = "crates/vm-core" } vm-device = { path = "crates/vm-device" } vm-fdt = "0.3.0" vm-machine = { path = "crates/vm-machine" } +vm-mm = { path = "crates/vm-mm" } vm-pci = { path = "crates/vm-pci" } vm-virtio = { path = "crates/vm-virtio" } zerocopy = { version = "0.8.33", features = ["derive"] } diff --git a/crates/vm-bootloader/Cargo.toml b/crates/vm-bootloader/Cargo.toml index c5a5e1e..8d35aee 100644 --- a/crates/vm-bootloader/Cargo.toml +++ b/crates/vm-bootloader/Cargo.toml @@ -8,6 +8,7 @@ anyhow.workspace = true thiserror.workspace = true vm-core.workspace = true vm-fdt.workspace = true +vm-mm.workspace = true [target.'cfg(target_arch = "aarch64")'.dependencies] tracing.workspace = true diff --git a/crates/vm-bootloader/src/boot_loader.rs b/crates/vm-bootloader/src/boot_loader.rs index 1555f49..8124f63 100644 --- a/crates/vm-bootloader/src/boot_loader.rs +++ b/crates/vm-bootloader/src/boot_loader.rs @@ -4,8 +4,8 @@ use std::slice::Iter; use vm_core::arch::irq::InterruptController; use vm_core::arch::layout; use vm_core::device::mmio::mmio_device::MmioDevice; -use vm_core::mm::manager::MemoryAddressSpace; use vm_core::virt::Virt; +use vm_mm::manager::MemoryAddressSpace; pub mod arch; diff --git a/crates/vm-bootloader/src/boot_loader/arch/aarch64.rs b/crates/vm-bootloader/src/boot_loader/arch/aarch64.rs index 79733a0..dd66fbb 100644 --- a/crates/vm-bootloader/src/boot_loader/arch/aarch64.rs +++ b/crates/vm-bootloader/src/boot_loader/arch/aarch64.rs @@ -7,10 +7,10 @@ use vm_core::arch::aarch64::vcpu::AArch64Vcpu; use vm_core::arch::irq::InterruptController; use vm_core::arch::layout::MemoryLayout; use vm_core::device::mmio::mmio_device::MmioDevice; -use vm_core::mm::allocator::MemoryContainer; -use vm_core::mm::manager::MemoryAddressSpace; use vm_core::virt::Virt; use vm_fdt::FdtWriter; +use vm_mm::allocator::MemoryContainer; +use vm_mm::manager::MemoryAddressSpace; use crate::boot_loader::BootLoader; use crate::boot_loader::BootLoaderBuilder; diff --git a/crates/vm-bootloader/src/boot_loader/arch/x86_64.rs b/crates/vm-bootloader/src/boot_loader/arch/x86_64.rs index 2dbe38c..de9a97f 100644 --- a/crates/vm-bootloader/src/boot_loader/arch/x86_64.rs +++ b/crates/vm-bootloader/src/boot_loader/arch/x86_64.rs @@ -3,8 +3,8 @@ use std::slice::Iter; use vm_core::arch::irq::InterruptController; use vm_core::device::mmio::mmio_device::MmioDevice; -use vm_core::mm::manager::MemoryAddressSpace; use vm_core::virt::Virt; +use vm_mm::manager::MemoryAddressSpace; use crate::boot_loader::BootLoader; use crate::boot_loader::BootLoaderBuilder; diff --git a/crates/vm-bootloader/src/initrd_loader.rs b/crates/vm-bootloader/src/initrd_loader.rs index 1e11c13..d604122 100644 --- a/crates/vm-bootloader/src/initrd_loader.rs +++ b/crates/vm-bootloader/src/initrd_loader.rs @@ -1,8 +1,8 @@ use std::fs; use std::path::Path; -use vm_core::mm::allocator::MemoryContainer; -use vm_core::mm::manager::MemoryAddressSpace; +use vm_mm::allocator::MemoryContainer; +use vm_mm::manager::MemoryAddressSpace; #[derive(thiserror::Error, Debug)] pub enum Error { diff --git a/crates/vm-bootloader/src/kernel_loader.rs b/crates/vm-bootloader/src/kernel_loader.rs index 115d6ee..1ace535 100644 --- a/crates/vm-bootloader/src/kernel_loader.rs +++ b/crates/vm-bootloader/src/kernel_loader.rs @@ -1,4 +1,4 @@ -use vm_core::mm::manager::MemoryAddressSpace; +use vm_mm::manager::MemoryAddressSpace; pub mod linux; diff --git a/crates/vm-bootloader/src/kernel_loader/linux/bzimage.rs b/crates/vm-bootloader/src/kernel_loader/linux/bzimage.rs index 08fe234..3583a43 100644 --- a/crates/vm-bootloader/src/kernel_loader/linux/bzimage.rs +++ b/crates/vm-bootloader/src/kernel_loader/linux/bzimage.rs @@ -2,8 +2,8 @@ use std::fs; use std::path::Path; use header::*; -use vm_core::mm::allocator::MemoryContainer; -use vm_core::mm::manager::MemoryAddressSpace; +use vm_mm::allocator::MemoryContainer; +use vm_mm::manager::MemoryAddressSpace; use crate::kernel_loader::Error; use crate::kernel_loader::KernelLoader; diff --git a/crates/vm-bootloader/src/kernel_loader/linux/image.rs b/crates/vm-bootloader/src/kernel_loader/linux/image.rs index e31e15e..857b456 100644 --- a/crates/vm-bootloader/src/kernel_loader/linux/image.rs +++ b/crates/vm-bootloader/src/kernel_loader/linux/image.rs @@ -6,8 +6,8 @@ use std::fs; use std::path::Path; use tracing::debug; -use vm_core::mm::allocator::MemoryContainer; -use vm_core::mm::manager::MemoryAddressSpace; +use vm_mm::allocator::MemoryContainer; +use vm_mm::manager::MemoryAddressSpace; use zerocopy::FromBytes; use crate::kernel_loader::Error; diff --git a/crates/vm-core/Cargo.toml b/crates/vm-core/Cargo.toml index 7f13e65..29a721a 100644 --- a/crates/vm-core/Cargo.toml +++ b/crates/vm-core/Cargo.toml @@ -14,6 +14,7 @@ memmap2 = { workspace = true } thiserror = { workspace = true } tracing = { workspace = true } vm-fdt = { workspace = true } +vm-mm = { workspace = true } [target.'cfg(target_arch = "aarch64")'.dependencies] gdbstub = { workspace = true } diff --git a/crates/vm-core/src/lib.rs b/crates/vm-core/src/lib.rs index 40fc4fa..5a964a9 100644 --- a/crates/vm-core/src/lib.rs +++ b/crates/vm-core/src/lib.rs @@ -4,5 +4,4 @@ pub mod arch; pub mod debug; pub mod device; pub mod error; -pub mod mm; pub mod virt; diff --git a/crates/vm-core/src/virt.rs b/crates/vm-core/src/virt.rs index 5b084c9..7d73856 100644 --- a/crates/vm-core/src/virt.rs +++ b/crates/vm-core/src/virt.rs @@ -1,14 +1,15 @@ use std::sync::Arc; use std::sync::Mutex; +use vm_mm::allocator::MemoryContainer; +use vm_mm::manager::MemoryAddressSpace; + use crate::arch::Arch; use crate::arch::irq::InterruptController; use crate::arch::vcpu::Vcpu; use crate::device::mmio::MmioLayout; use crate::device::vm_exit::DeviceVmExitHandler; use crate::error::Result; -use crate::mm::allocator::MemoryContainer; -use crate::mm::manager::MemoryAddressSpace; #[cfg(feature = "kvm")] pub mod kvm; diff --git a/crates/vm-core/src/virt/hvp.rs b/crates/vm-core/src/virt/hvp.rs index fa7a7bd..0b801dc 100644 --- a/crates/vm-core/src/virt/hvp.rs +++ b/crates/vm-core/src/virt/hvp.rs @@ -12,6 +12,7 @@ use applevisor::vm::GicEnabled; use applevisor::vm::VirtualMachine; use applevisor::vm::VirtualMachineConfig; use applevisor::vm::VirtualMachineInstance; +use vm_mm::manager::MemoryAddressSpace; use crate::arch::Arch; use crate::arch::aarch64::AArch64; @@ -30,7 +31,6 @@ use crate::arch::vcpu::Vcpu; use crate::device::mmio::MmioLayout; use crate::device::vm_exit::DeviceVmExitHandler; use crate::error::Error; -use crate::mm::manager::MemoryAddressSpace; use crate::virt::Virt; use crate::virt::hvp::irq_chip::HvpGicV3; use crate::virt::hvp::mm::HvpAllocator; diff --git a/crates/vm-core/src/virt/hvp/mm.rs b/crates/vm-core/src/virt/hvp/mm.rs index ffb33e4..0836cad 100644 --- a/crates/vm-core/src/virt/hvp/mm.rs +++ b/crates/vm-core/src/virt/hvp/mm.rs @@ -1,9 +1,8 @@ use applevisor::memory::Memory; use applevisor::vm::VirtualMachineInstance; - -use crate::mm::Error; -use crate::mm::allocator::Allocator; -use crate::mm::allocator::MemoryContainer; +use vm_mm::allocator::Allocator; +use vm_mm::allocator::MemoryContainer; +use vm_mm::error::Error; pub struct MemoryWrapper(pub Memory); diff --git a/crates/vm-core/src/virt/kvm.rs b/crates/vm-core/src/virt/kvm.rs index 0c07707..2830d2b 100644 --- a/crates/vm-core/src/virt/kvm.rs +++ b/crates/vm-core/src/virt/kvm.rs @@ -7,14 +7,14 @@ use anyhow::anyhow; use kvm_bindings::*; use kvm_ioctls::*; use memmap2::MmapMut; +use vm_mm::allocator::mmap_allocator::MmapAllocator; +use vm_mm::manager::MemoryAddressSpace; use crate::arch::Arch; use crate::arch::irq::InterruptController; use crate::device::mmio::MmioLayout; use crate::device::vm_exit::DeviceVmExitHandler; use crate::error::Error; -use crate::mm::allocator::mmap_allocator::MmapAllocator; -use crate::mm::manager::MemoryAddressSpace; use crate::virt::Vcpu; use crate::virt::Virt; use crate::virt::kvm::irq_chip::KvmIRQ; diff --git a/crates/vm-device/Cargo.toml b/crates/vm-device/Cargo.toml index bd18cdf..27e8e2c 100644 --- a/crates/vm-device/Cargo.toml +++ b/crates/vm-device/Cargo.toml @@ -14,6 +14,7 @@ tokio.workspace = true tracing.workspace = true vm-core.workspace = true vm-fdt.workspace = true +vm-mm.workspace = true vm-pci.workspace = true vm-virtio.workspace = true zerocopy.workspace = true diff --git a/crates/vm-device/src/device/virtio/virtio_blk.rs b/crates/vm-device/src/device/virtio/virtio_blk.rs index 39e8d2f..86a3a66 100644 --- a/crates/vm-device/src/device/virtio/virtio_blk.rs +++ b/crates/vm-device/src/device/virtio/virtio_blk.rs @@ -3,8 +3,8 @@ use std::sync::Mutex; use tokio::sync::Notify; use vm_core::arch::irq::InterruptController; -use vm_core::mm::allocator::MemoryContainer; -use vm_core::mm::manager::MemoryAddressSpace; +use vm_mm::allocator::MemoryContainer; +use vm_mm::manager::MemoryAddressSpace; use vm_pci::device::interrupt::legacy::InterruptPin; use vm_virtio::device::VirtIoDevice; use vm_virtio::device::blk::config::VirtioBlkConfig; diff --git a/crates/vm-device/src/device/virtio/virtio_mmio_kbd.rs b/crates/vm-device/src/device/virtio/virtio_mmio_kbd.rs index 3ade276..6ea3c1e 100644 --- a/crates/vm-device/src/device/virtio/virtio_mmio_kbd.rs +++ b/crates/vm-device/src/device/virtio/virtio_mmio_kbd.rs @@ -9,8 +9,8 @@ use vm_core::device::Device; use vm_core::device::mmio::MmioDevice; use vm_core::device::mmio::MmioRange; use vm_core::arch::irq::InterruptController; -use vm_core::mm::allocator::MemoryContainer; -use vm_core::mm::manager::MemoryAddressSpace; +use vm_mm::allocator::MemoryContainer; +use vm_mm::manager::MemoryAddressSpace; use vm_virtio::transport::VirtIo; use vm_virtio::transport::mmio::VirtIoMmio; use vm_virtio::transport::mmio::VirtIoMmioAdaptor; diff --git a/crates/vm-machine/Cargo.toml b/crates/vm-machine/Cargo.toml index 14fe770..0aa17d8 100644 --- a/crates/vm-machine/Cargo.toml +++ b/crates/vm-machine/Cargo.toml @@ -14,5 +14,6 @@ tracing = { workspace = true } vm-bootloader = { workspace = true } vm-core = { workspace = true } vm-device = { workspace = true } +vm-mm = { workspace = true } vm-pci = { workspace = true } vm-virtio = { workspace = true } diff --git a/crates/vm-machine/src/device.rs b/crates/vm-machine/src/device.rs index 2637d4b..890936a 100644 --- a/crates/vm-machine/src/device.rs +++ b/crates/vm-machine/src/device.rs @@ -5,12 +5,12 @@ use anyhow::anyhow; use vm_core::arch::irq::InterruptController; use vm_core::device::device_manager::DeviceManager; use vm_core::device::mmio::MmioRange; -use vm_core::mm::allocator::MemoryContainer; -use vm_core::mm::manager::MemoryAddressSpace; use vm_device::device::Device; use vm_device::device::gic_v3::GicV3; use vm_device::device::virtio::virtio_blk::VirtIoBlkDevice; use vm_device::device::virtio::virtio_blk::VirtIoMmioBlkDevice; +use vm_mm::allocator::MemoryContainer; +use vm_mm::manager::MemoryAddressSpace; use vm_pci::root_complex::mmio::PciRootComplexMmio; use vm_virtio::device::pci::VirtIoPciDevice; diff --git a/crates/vm-machine/src/firmware/bios.rs b/crates/vm-machine/src/firmware/bios.rs index 3e8bcc8..35d86b5 100644 --- a/crates/vm-machine/src/firmware/bios.rs +++ b/crates/vm-machine/src/firmware/bios.rs @@ -1,5 +1,5 @@ -use vm_core::mm::allocator::MemoryContainer; -use vm_core::mm::manager::MemoryAddressSpace; +use vm_mm::allocator::MemoryContainer; +use vm_mm::manager::MemoryAddressSpace; use crate::firmware::bios::e820::*; use crate::firmware::bios::ivt::InterruptVectorTable; diff --git a/crates/vm-machine/src/vm.rs b/crates/vm-machine/src/vm.rs index ca3e824..3aa4f60 100644 --- a/crates/vm-machine/src/vm.rs +++ b/crates/vm-machine/src/vm.rs @@ -8,11 +8,11 @@ use vm_core::arch::layout::MemoryLayout; use vm_core::debug::gdbstub::GdbStub; use vm_core::device::device_manager::DeviceManager; use vm_core::device::mmio::MmioLayout; -use vm_core::mm::allocator::MemoryContainer; -use vm_core::mm::manager::MemoryAddressSpace; -use vm_core::mm::region::MemoryRegion; use vm_core::virt::Virt; use vm_device::device::Device; +use vm_mm::allocator::MemoryContainer; +use vm_mm::manager::MemoryAddressSpace; +use vm_mm::region::MemoryRegion; use crate::device::InitDevice; use crate::vm::error::Error; diff --git a/crates/vm-mm/Cargo.toml b/crates/vm-mm/Cargo.toml new file mode 100644 index 0000000..2a883fb --- /dev/null +++ b/crates/vm-mm/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "vm-mm" +version = "0.1.0" +edition = "2024" + +[dependencies] +anyhow.workspace = true +memmap2.workspace = true +thiserror.workspace = true diff --git a/crates/vm-core/src/mm/allocator.rs b/crates/vm-mm/src/allocator.rs similarity index 91% rename from crates/vm-core/src/mm/allocator.rs rename to crates/vm-mm/src/allocator.rs index 2c70c10..4960b4a 100644 --- a/crates/vm-core/src/mm/allocator.rs +++ b/crates/vm-mm/src/allocator.rs @@ -1,4 +1,4 @@ -use crate::mm::Error; +use crate::error::Error; pub mod mmap_allocator; diff --git a/crates/vm-core/src/mm/allocator/mmap_allocator.rs b/crates/vm-mm/src/allocator/mmap_allocator.rs similarity index 84% rename from crates/vm-core/src/mm/allocator/mmap_allocator.rs rename to crates/vm-mm/src/allocator/mmap_allocator.rs index f52a9ad..3ec6cd2 100644 --- a/crates/vm-core/src/mm/allocator/mmap_allocator.rs +++ b/crates/vm-mm/src/allocator/mmap_allocator.rs @@ -1,12 +1,12 @@ use memmap2::MmapMut; -use crate::mm::Error; -use crate::mm::allocator::Allocator; +use crate::allocator::Allocator; +use crate::error::Error; mod container { use memmap2::MmapMut; - use crate::mm::allocator::MemoryContainer; + use crate::allocator::MemoryContainer; impl MemoryContainer for MmapMut { fn to_hva(&mut self) -> *mut u8 { diff --git a/crates/vm-core/src/mm.rs b/crates/vm-mm/src/error.rs similarity index 89% rename from crates/vm-core/src/mm.rs rename to crates/vm-mm/src/error.rs index ef61a12..b642254 100644 --- a/crates/vm-core/src/mm.rs +++ b/crates/vm-mm/src/error.rs @@ -1,7 +1,3 @@ -pub mod allocator; -pub mod manager; -pub mod region; - #[derive(Debug, thiserror::Error)] pub enum Error { #[error("failed to allocate anonymous memory, len: {len}")] diff --git a/crates/vm-mm/src/lib.rs b/crates/vm-mm/src/lib.rs new file mode 100644 index 0000000..be82980 --- /dev/null +++ b/crates/vm-mm/src/lib.rs @@ -0,0 +1,4 @@ +pub mod allocator; +pub mod error; +pub mod manager; +pub mod region; diff --git a/crates/vm-core/src/mm/manager.rs b/crates/vm-mm/src/manager.rs similarity index 95% rename from crates/vm-core/src/mm/manager.rs rename to crates/vm-mm/src/manager.rs index 5ad7922..7052b67 100644 --- a/crates/vm-core/src/mm/manager.rs +++ b/crates/vm-mm/src/manager.rs @@ -1,9 +1,9 @@ use std::collections::BTreeMap; use std::collections::btree_map; -use crate::mm::Error; -use crate::mm::allocator::MemoryContainer; -use crate::mm::region::MemoryRegion; +use crate::allocator::MemoryContainer; +use crate::error::Error; +use crate::region::MemoryRegion; pub struct MemoryAddressSpace { regions: BTreeMap>, @@ -115,9 +115,9 @@ where mod tests { use memmap2::MmapMut; - use crate::mm::allocator::mmap_allocator::MmapAllocator; - use crate::mm::manager::MemoryAddressSpace; - use crate::mm::region::MemoryRegion; + use crate::allocator::mmap_allocator::MmapAllocator; + use crate::manager::MemoryAddressSpace; + use crate::region::MemoryRegion; #[test] fn test_memory_layout() -> anyhow::Result<()> { diff --git a/crates/vm-core/src/mm/region.rs b/crates/vm-mm/src/region.rs similarity index 90% rename from crates/vm-core/src/mm/region.rs rename to crates/vm-mm/src/region.rs index 19a2ec6..9f4eb79 100644 --- a/crates/vm-core/src/mm/region.rs +++ b/crates/vm-mm/src/region.rs @@ -1,8 +1,8 @@ use std::cell::OnceCell; -use crate::mm::Error; -use crate::mm::allocator::Allocator; -use crate::mm::allocator::MemoryContainer; +use crate::allocator::Allocator; +use crate::allocator::MemoryContainer; +use crate::error::Error; pub struct MemoryRegion { pub gpa: u64, diff --git a/crates/vm-virtio/Cargo.toml b/crates/vm-virtio/Cargo.toml index 6577b78..83d50a2 100644 --- a/crates/vm-virtio/Cargo.toml +++ b/crates/vm-virtio/Cargo.toml @@ -12,5 +12,6 @@ tokio.workspace = true tracing.workspace = true vm-core.workspace = true vm-fdt.workspace = true +vm-mm.workspace = true vm-pci.workspace = true zerocopy.workspace = true diff --git a/crates/vm-virtio/src/virt_queue.rs b/crates/vm-virtio/src/virt_queue.rs index 4886174..53bfdbb 100644 --- a/crates/vm-virtio/src/virt_queue.rs +++ b/crates/vm-virtio/src/virt_queue.rs @@ -1,8 +1,8 @@ use std::cell::OnceCell; use tracing::warn; -use vm_core::mm::allocator::MemoryContainer; -use vm_core::mm::manager::MemoryAddressSpace; +use vm_mm::allocator::MemoryContainer; +use vm_mm::manager::MemoryAddressSpace; use crate::result::Result; use crate::result::VirtIoError; diff --git a/crates/vm-virtio/src/virt_queue/virtq_desc_table.rs b/crates/vm-virtio/src/virt_queue/virtq_desc_table.rs index b3c27ec..8febbee 100644 --- a/crates/vm-virtio/src/virt_queue/virtq_desc_table.rs +++ b/crates/vm-virtio/src/virt_queue/virtq_desc_table.rs @@ -1,7 +1,7 @@ use std::ptr::NonNull; -use vm_core::mm::allocator::MemoryContainer; -use vm_core::mm::manager::MemoryAddressSpace; +use vm_mm::allocator::MemoryContainer; +use vm_mm::manager::MemoryAddressSpace; use crate::result::Result; use crate::result::VirtIoError; From f374269c439ebe82a822a696c57f28a668161dd2 Mon Sep 17 00:00:00 2001 From: Zhang Junyu Date: Sat, 28 Feb 2026 23:17:40 +0800 Subject: [PATCH 2/9] chore: Remove an unused file --- crates/vm-core/src/vcpu.rs | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 crates/vm-core/src/vcpu.rs diff --git a/crates/vm-core/src/vcpu.rs b/crates/vm-core/src/vcpu.rs deleted file mode 100644 index 5175823..0000000 --- a/crates/vm-core/src/vcpu.rs +++ /dev/null @@ -1,4 +0,0 @@ -use crate::arch::Arch; -use crate::device::mmio::MmioLayout; - -pub mod arch; From fae824063f517e909ad9350210099083e33fa5bd Mon Sep 17 00:00:00 2001 From: Zhang Junyu Date: Sat, 28 Feb 2026 23:25:36 +0800 Subject: [PATCH 3/9] chore: Modify visibility --- crates/vm-machine/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/vm-machine/src/lib.rs b/crates/vm-machine/src/lib.rs index 8f3bf3a..d40e5e1 100644 --- a/crates/vm-machine/src/lib.rs +++ b/crates/vm-machine/src/lib.rs @@ -1,6 +1,6 @@ #![deny(warnings)] +mod device; mod firmware; -pub mod device; pub mod vm; From 2689292eac9210a2ef163f5fefc3473e35d83781 Mon Sep 17 00:00:00 2001 From: Zhang Junyu Date: Sat, 28 Feb 2026 23:28:58 +0800 Subject: [PATCH 4/9] refine: Refine error --- crates/vm-machine/src/{vm => }/error.rs | 16 ++++++---------- crates/vm-machine/src/lib.rs | 1 + crates/vm-machine/src/vm.rs | 7 ++----- 3 files changed, 9 insertions(+), 15 deletions(-) rename crates/vm-machine/src/{vm => }/error.rs (72%) diff --git a/crates/vm-machine/src/vm/error.rs b/crates/vm-machine/src/error.rs similarity index 72% rename from crates/vm-machine/src/vm/error.rs rename to crates/vm-machine/src/error.rs index 4c0fae7..a7144cc 100644 --- a/crates/vm-machine/src/vm/error.rs +++ b/crates/vm-machine/src/error.rs @@ -1,13 +1,7 @@ -use vm_bootloader::boot_loader::Error as BootLoaderError; -use vm_core::error::Error as VmError; - #[derive(Debug, thiserror::Error)] pub enum Error { #[error("Platform error: {0}")] - Platform(VmError), - - #[error("Failed to init cpu, error: {0}")] - InitCpu(String), + Platform(vm_core::error::Error), #[error("Failed to init memory, error: {0}")] InitMemory(String), @@ -22,7 +16,7 @@ pub enum Error { InitDevice(String), #[error("Failed to setup with bootloader, error: {0}")] - Bootloader(BootLoaderError), + Bootloader(vm_bootloader::boot_loader::Error), #[error("Failed to run vm, error: {0}")] Run(String), @@ -31,8 +25,8 @@ pub enum Error { GdbStub(String), } -impl From for Error { - fn from(err: VmError) -> Self { +impl From for Error { + fn from(err: vm_core::error::Error) -> Self { Error::Platform(err) } } @@ -42,3 +36,5 @@ impl From for Error { Error::Bootloader(err) } } + +pub type Result = core::result::Result; diff --git a/crates/vm-machine/src/lib.rs b/crates/vm-machine/src/lib.rs index d40e5e1..70d96c1 100644 --- a/crates/vm-machine/src/lib.rs +++ b/crates/vm-machine/src/lib.rs @@ -3,4 +3,5 @@ mod device; mod firmware; +pub mod error; pub mod vm; diff --git a/crates/vm-machine/src/vm.rs b/crates/vm-machine/src/vm.rs index 3aa4f60..4dbc9ad 100644 --- a/crates/vm-machine/src/vm.rs +++ b/crates/vm-machine/src/vm.rs @@ -15,11 +15,8 @@ use vm_mm::manager::MemoryAddressSpace; use vm_mm::region::MemoryRegion; use crate::device::InitDevice; -use crate::vm::error::Error; - -pub mod error; - -pub type Result = core::result::Result; +use crate::error::Error; +use crate::error::Result; pub struct VmBuilder { memory_size: usize, From 9012f326b2073435a5bb0eacde6f638588c2cf3b Mon Sep 17 00:00:00 2001 From: Zhang Junyu Date: Sat, 28 Feb 2026 23:37:59 +0800 Subject: [PATCH 5/9] refine: Refine return value for run --- crates/vm-core/src/error.rs | 2 ++ crates/vm-core/src/virt.rs | 2 +- crates/vm-core/src/virt/hvp.rs | 5 +++-- crates/vm-core/src/virt/kvm.rs | 7 ++++--- crates/vm-machine/src/error.rs | 3 --- crates/vm-machine/src/vm.rs | 4 +--- 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/crates/vm-core/src/error.rs b/crates/vm-core/src/error.rs index 2afa581..fdefff5 100644 --- a/crates/vm-core/src/error.rs +++ b/crates/vm-core/src/error.rs @@ -10,6 +10,8 @@ pub enum Error { #[cfg(feature = "hvp")] #[error("{0}")] ApplevisorError(applevisor::error::HypervisorError), + #[error("{0}")] + Internal(String), #[error("Unknown error: {0}")] Unknown(String), } diff --git a/crates/vm-core/src/virt.rs b/crates/vm-core/src/virt.rs index 7d73856..f9902ad 100644 --- a/crates/vm-core/src/virt.rs +++ b/crates/vm-core/src/virt.rs @@ -41,5 +41,5 @@ pub trait Virt: Sized { fn get_vcpus(&self) -> anyhow::Result<&Vec>; fn get_vcpus_mut(&mut self) -> anyhow::Result<&mut Vec>; - fn run(&mut self, device_manager: Arc>) -> anyhow::Result<()>; + fn run(&mut self, device_manager: Arc>) -> Result<()>; } diff --git a/crates/vm-core/src/virt/hvp.rs b/crates/vm-core/src/virt/hvp.rs index 0b801dc..32c4036 100644 --- a/crates/vm-core/src/virt/hvp.rs +++ b/crates/vm-core/src/virt/hvp.rs @@ -31,6 +31,7 @@ use crate::arch::vcpu::Vcpu; use crate::device::mmio::MmioLayout; use crate::device::vm_exit::DeviceVmExitHandler; use crate::error::Error; +use crate::error::Result; use crate::virt::Virt; use crate::virt::hvp::irq_chip::HvpGicV3; use crate::virt::hvp::mm::HvpAllocator; @@ -136,7 +137,7 @@ impl Virt for Hvp { type Vcpu = HvpVcpu; type Memory = MemoryWrapper; - fn new(num_vcpus: usize) -> Result { + fn new(num_vcpus: usize) -> Result { let layout = AArch64Layout::default(); let mut vm_config = VirtualMachineConfig::default(); @@ -334,7 +335,7 @@ impl Virt for Hvp { Ok(vcpus) } - fn run(&mut self, device_manager: Arc>) -> anyhow::Result<()> { + fn run(&mut self, device_manager: Arc>) -> Result<()> { let mmio_layout = device_manager.lock().unwrap().mmio_layout(); thread::scope(|s| { diff --git a/crates/vm-core/src/virt/kvm.rs b/crates/vm-core/src/virt/kvm.rs index 2830d2b..1f0de1e 100644 --- a/crates/vm-core/src/virt/kvm.rs +++ b/crates/vm-core/src/virt/kvm.rs @@ -15,6 +15,7 @@ use crate::arch::irq::InterruptController; use crate::device::mmio::MmioLayout; use crate::device::vm_exit::DeviceVmExitHandler; use crate::error::Error; +use crate::error::Result; use crate::virt::Vcpu; use crate::virt::Virt; use crate::virt::kvm::irq_chip::KvmIRQ; @@ -46,7 +47,7 @@ where type Vcpu = KvmVcpu; type Memory = MmapMut; - fn new(_cpu_number: usize) -> Result { + fn new(_cpu_number: usize) -> Result { let kvm = Kvm::new() .map_err(|_| Error::FailedInitialize("kvm: Failed to open /dev/kvm".to_string()))?; @@ -130,11 +131,11 @@ where .ok_or_else(|| anyhow!("vcpus is not init")) } - fn run(&mut self, device: Arc>) -> anyhow::Result<()> { + fn run(&mut self, device: Arc>) -> Result<()> { let vcpus = self .vcpus .get_mut() - .ok_or_else(|| anyhow!("vcpus is not init"))?; + .ok_or_else(|| Error::Internal("vcpus is not init".to_string()))?; assert_eq!(vcpus.len(), 1); diff --git a/crates/vm-machine/src/error.rs b/crates/vm-machine/src/error.rs index a7144cc..ff7f868 100644 --- a/crates/vm-machine/src/error.rs +++ b/crates/vm-machine/src/error.rs @@ -18,9 +18,6 @@ pub enum Error { #[error("Failed to setup with bootloader, error: {0}")] Bootloader(vm_bootloader::boot_loader::Error), - #[error("Failed to run vm, error: {0}")] - Run(String), - #[error("gdb_stub failed, error: {0}")] GdbStub(String), } diff --git a/crates/vm-machine/src/vm.rs b/crates/vm-machine/src/vm.rs index 4dbc9ad..aa571ce 100644 --- a/crates/vm-machine/src/vm.rs +++ b/crates/vm-machine/src/vm.rs @@ -135,9 +135,7 @@ where .map_err(|err| Error::GdbStub(err.to_string()))?; } - self.virt - .run(self.device_manager.clone()) - .map_err(|err| Error::Run(err.to_string()))?; + self.virt.run(self.device_manager.clone())?; Ok(()) } From ff2352f53c0dfa007fa01c8ffd8f5879903780a2 Mon Sep 17 00:00:00 2001 From: Zhang Junyu Date: Sat, 28 Feb 2026 23:42:14 +0800 Subject: [PATCH 6/9] refine: Refine error for vcpu --- crates/vm-core/src/virt.rs | 6 +++--- crates/vm-core/src/virt/hvp.rs | 29 ++++++++++------------------- crates/vm-core/src/virt/kvm.rs | 15 ++++++++------- 3 files changed, 21 insertions(+), 29 deletions(-) diff --git a/crates/vm-core/src/virt.rs b/crates/vm-core/src/virt.rs index f9902ad..476f8c3 100644 --- a/crates/vm-core/src/virt.rs +++ b/crates/vm-core/src/virt.rs @@ -37,9 +37,9 @@ pub trait Virt: Sized { fn get_layout_mut(&mut self) -> &mut ::Layout; fn get_vcpu_number(&self) -> usize; - fn get_vcpu_mut(&mut self, vcpu: u64) -> anyhow::Result>; - fn get_vcpus(&self) -> anyhow::Result<&Vec>; - fn get_vcpus_mut(&mut self) -> anyhow::Result<&mut Vec>; + fn get_vcpu_mut(&mut self, vcpu: u64) -> Result>; + fn get_vcpus(&self) -> Result<&Vec>; + fn get_vcpus_mut(&mut self) -> Result<&mut Vec>; fn run(&mut self, device_manager: Arc>) -> Result<()>; } diff --git a/crates/vm-core/src/virt/hvp.rs b/crates/vm-core/src/virt/hvp.rs index 32c4036..4b89502 100644 --- a/crates/vm-core/src/virt/hvp.rs +++ b/crates/vm-core/src/virt/hvp.rs @@ -5,7 +5,6 @@ use std::sync::mpsc; use std::sync::mpsc::Receiver; use std::thread; -use anyhow::anyhow; use applevisor::gic::GicConfig; use applevisor::memory::MemPerms; use applevisor::vm::GicEnabled; @@ -307,32 +306,24 @@ impl Virt for Hvp { self.num_vcpus } - fn get_vcpu_mut(&mut self, vcpu_id: u64) -> anyhow::Result> { - let vcpu = self + fn get_vcpu_mut(&mut self, vcpu_id: u64) -> Result> { + Ok(self .vcpus .get_mut() - .ok_or_else(|| anyhow!("vcpu is not initialized"))? - .get_mut(vcpu_id as usize); - - Ok(vcpu) + .ok_or_else(|| Error::Internal("vcpu is not initialized".to_string()))? + .get_mut(vcpu_id as usize)) } - fn get_vcpus(&self) -> anyhow::Result<&Vec> { - let vcpus = self - .vcpus + fn get_vcpus(&self) -> Result<&Vec> { + self.vcpus .get() - .ok_or_else(|| anyhow!("vcpu is not initialized"))?; - - Ok(vcpus) + .ok_or_else(|| Error::Internal("vcpu is not initialized".to_string())) } - fn get_vcpus_mut(&mut self) -> anyhow::Result<&mut Vec> { - let vcpus = self - .vcpus + fn get_vcpus_mut(&mut self) -> Result<&mut Vec> { + self.vcpus .get_mut() - .ok_or_else(|| anyhow!("vcpu is not initialized"))?; - - Ok(vcpus) + .ok_or_else(|| Error::Internal("vcpu is not initialized".to_string())) } fn run(&mut self, device_manager: Arc>) -> Result<()> { diff --git a/crates/vm-core/src/virt/kvm.rs b/crates/vm-core/src/virt/kvm.rs index 1f0de1e..48c4252 100644 --- a/crates/vm-core/src/virt/kvm.rs +++ b/crates/vm-core/src/virt/kvm.rs @@ -3,7 +3,6 @@ use std::marker::PhantomData; use std::sync::Arc; use std::sync::Mutex; -use anyhow::anyhow; use kvm_bindings::*; use kvm_ioctls::*; use memmap2::MmapMut; @@ -112,23 +111,25 @@ where todo!() } - fn get_vcpu_mut(&mut self, vcpu: u64) -> anyhow::Result> { + fn get_vcpu_mut(&mut self, vcpu: u64) -> Result> { let vcpus = self .vcpus .get_mut() - .ok_or_else(|| anyhow!("vcpus is not init"))?; + .ok_or_else(|| Error::Internal("vcpus is not init".to_string()))?; Ok(vcpus.get_mut(vcpu as usize)) } - fn get_vcpus(&self) -> anyhow::Result<&Vec> { - self.vcpus.get().ok_or_else(|| anyhow!("vcpus is not init")) + fn get_vcpus(&self) -> Result<&Vec> { + self.vcpus + .get() + .ok_or_else(|| Error::Internal("vcpus is not init".to_string())) } - fn get_vcpus_mut(&mut self) -> anyhow::Result<&mut Vec> { + fn get_vcpus_mut(&mut self) -> Result<&mut Vec> { self.vcpus .get_mut() - .ok_or_else(|| anyhow!("vcpus is not init")) + .ok_or_else(|| Error::Internal("vcpus is not init".to_string())) } fn run(&mut self, device: Arc>) -> Result<()> { From ec67a36d8efe1889a2672707bdf5edbd0b888c8e Mon Sep 17 00:00:00 2001 From: Zhang Junyu Date: Sat, 28 Feb 2026 23:44:26 +0800 Subject: [PATCH 7/9] refine: Refine error for irq --- crates/vm-core/src/virt.rs | 2 +- crates/vm-core/src/virt/hvp.rs | 2 +- crates/vm-core/src/virt/kvm.rs | 2 +- crates/vm-core/src/virt/kvm/irq_chip.rs | 3 ++- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/vm-core/src/virt.rs b/crates/vm-core/src/virt.rs index 476f8c3..458b093 100644 --- a/crates/vm-core/src/virt.rs +++ b/crates/vm-core/src/virt.rs @@ -24,7 +24,7 @@ pub trait Virt: Sized { fn new(num_vcpus: usize) -> Result; - fn init_irq(&mut self) -> anyhow::Result>; + fn init_irq(&mut self) -> Result>; fn init_memory( &mut self, mmio_layout: &MmioLayout, diff --git a/crates/vm-core/src/virt/hvp.rs b/crates/vm-core/src/virt/hvp.rs index 4b89502..4cb3894 100644 --- a/crates/vm-core/src/virt/hvp.rs +++ b/crates/vm-core/src/virt/hvp.rs @@ -266,7 +266,7 @@ impl Virt for Hvp { }) } - fn init_irq(&mut self) -> anyhow::Result> { + fn init_irq(&mut self) -> Result> { Ok(self.gic_chip.clone()) } diff --git a/crates/vm-core/src/virt/kvm.rs b/crates/vm-core/src/virt/kvm.rs index 48c4252..91b2231 100644 --- a/crates/vm-core/src/virt/kvm.rs +++ b/crates/vm-core/src/virt/kvm.rs @@ -63,7 +63,7 @@ where }) } - fn init_irq(&mut self) -> anyhow::Result> { + fn init_irq(&mut self) -> Result> { Ok(Arc::new(KvmIRQ::new(self.vm_fd.clone())?)) } diff --git a/crates/vm-core/src/virt/kvm/irq_chip.rs b/crates/vm-core/src/virt/kvm/irq_chip.rs index f4c28c9..41093a3 100644 --- a/crates/vm-core/src/virt/kvm/irq_chip.rs +++ b/crates/vm-core/src/virt/kvm/irq_chip.rs @@ -5,6 +5,7 @@ use tracing::error; use crate::arch::irq::InterruptController; use crate::arch::irq::Phandle; +use crate::error::Result; mod arch; @@ -13,7 +14,7 @@ pub struct KvmIRQ { } impl KvmIRQ { - pub fn new(vm_fd: Arc) -> anyhow::Result { + pub fn new(vm_fd: Arc) -> Result { vm_fd.create_irq_chip()?; Ok(KvmIRQ { vm_fd }) From 00b75a11a8eb95c9f0e19dda48eb85f85e021a07 Mon Sep 17 00:00:00 2001 From: Zhang Junyu Date: Sat, 28 Feb 2026 23:50:21 +0800 Subject: [PATCH 8/9] refine: Refine API for Virt --- crates/vm-core/src/arch/layout.rs | 6 ++++++ crates/vm-core/src/error.rs | 10 ++++++++++ crates/vm-core/src/virt.rs | 4 ++-- crates/vm-core/src/virt/hvp.rs | 4 ++-- crates/vm-core/src/virt/kvm.rs | 6 +++--- crates/vm-core/src/virt/kvm/arch/aarch64.rs | 3 ++- crates/vm-core/src/virt/kvm/arch/x86_64.rs | 3 ++- 7 files changed, 27 insertions(+), 9 deletions(-) diff --git a/crates/vm-core/src/arch/layout.rs b/crates/vm-core/src/arch/layout.rs index 5ced1fd..77d93c7 100644 --- a/crates/vm-core/src/arch/layout.rs +++ b/crates/vm-core/src/arch/layout.rs @@ -26,6 +26,12 @@ pub enum Error { DtbAlreadySet, } +impl From for crate::error::Error { + fn from(err: Error) -> Self { + crate::error::Error::LayoutError(err) + } +} + pub type Result = core::result::Result; pub trait MemoryLayout: Clone { diff --git a/crates/vm-core/src/error.rs b/crates/vm-core/src/error.rs index fdefff5..7a9c933 100644 --- a/crates/vm-core/src/error.rs +++ b/crates/vm-core/src/error.rs @@ -11,6 +11,10 @@ pub enum Error { #[error("{0}")] ApplevisorError(applevisor::error::HypervisorError), #[error("{0}")] + MemoryError(vm_mm::error::Error), + #[error("{0}")] + LayoutError(crate::arch::layout::Error), + #[error("{0}")] Internal(String), #[error("Unknown error: {0}")] Unknown(String), @@ -30,4 +34,10 @@ impl From for Error { } } +impl From for Error { + fn from(err: vm_mm::error::Error) -> Self { + Error::MemoryError(err) + } +} + pub type Result = std::result::Result; diff --git a/crates/vm-core/src/virt.rs b/crates/vm-core/src/virt.rs index 458b093..2318173 100644 --- a/crates/vm-core/src/virt.rs +++ b/crates/vm-core/src/virt.rs @@ -30,8 +30,8 @@ pub trait Virt: Sized { mmio_layout: &MmioLayout, memory: &mut MemoryAddressSpace, memory_size: u64, - ) -> anyhow::Result<()>; - fn post_init(&mut self) -> anyhow::Result<()>; + ) -> Result<()>; + fn post_init(&mut self) -> Result<()>; fn get_layout(&self) -> &::Layout; fn get_layout_mut(&mut self) -> &mut ::Layout; diff --git a/crates/vm-core/src/virt/hvp.rs b/crates/vm-core/src/virt/hvp.rs index 4cb3894..47fa0d8 100644 --- a/crates/vm-core/src/virt/hvp.rs +++ b/crates/vm-core/src/virt/hvp.rs @@ -275,7 +275,7 @@ impl Virt for Hvp { _mmio_layout: &MmioLayout, memory: &mut MemoryAddressSpace, memory_size: u64, - ) -> anyhow::Result<()> { + ) -> Result<()> { let allocator = HvpAllocator { vm: &self.vm }; for region in memory { @@ -290,7 +290,7 @@ impl Virt for Hvp { Ok(()) } - fn post_init(&mut self) -> anyhow::Result<()> { + fn post_init(&mut self) -> Result<()> { Ok(()) } diff --git a/crates/vm-core/src/virt/kvm.rs b/crates/vm-core/src/virt/kvm.rs index 91b2231..e94e93f 100644 --- a/crates/vm-core/src/virt/kvm.rs +++ b/crates/vm-core/src/virt/kvm.rs @@ -25,7 +25,7 @@ mod irq_chip; mod vcpu; pub trait KvmArch { - fn arch_post_init(&mut self) -> anyhow::Result<()>; + fn arch_post_init(&mut self) -> Result<()>; } #[allow(unused)] @@ -72,7 +72,7 @@ where _mmio_layout: &MmioLayout, memory: &mut MemoryAddressSpace, _memory_size: u64, - ) -> anyhow::Result<()> { + ) -> Result<()> { let allocator = MmapAllocator; for (slot, region) in memory.into_iter().enumerate() { @@ -93,7 +93,7 @@ where Ok(()) } - fn post_init(&mut self) -> anyhow::Result<()> { + fn post_init(&mut self) -> Result<()> { self.arch_post_init()?; Ok(()) diff --git a/crates/vm-core/src/virt/kvm/arch/aarch64.rs b/crates/vm-core/src/virt/kvm/arch/aarch64.rs index 480c8b6..79ee75b 100644 --- a/crates/vm-core/src/virt/kvm/arch/aarch64.rs +++ b/crates/vm-core/src/virt/kvm/arch/aarch64.rs @@ -1,9 +1,10 @@ use crate::arch::aarch64::AArch64; +use crate::error::Result; use crate::virt::kvm::KvmArch; use crate::virt::kvm::KvmVirt; impl KvmArch for KvmVirt { - fn arch_post_init(&mut self) -> anyhow::Result<()> { + fn arch_post_init(&mut self) -> Result<()> { Ok(()) } } diff --git a/crates/vm-core/src/virt/kvm/arch/x86_64.rs b/crates/vm-core/src/virt/kvm/arch/x86_64.rs index 66220b0..46a0c0b 100644 --- a/crates/vm-core/src/virt/kvm/arch/x86_64.rs +++ b/crates/vm-core/src/virt/kvm/arch/x86_64.rs @@ -1,11 +1,12 @@ use kvm_bindings::kvm_pit_config; use crate::arch::x86_64::X86_64; +use crate::error::Result; use crate::virt::kvm::KvmArch; use crate::virt::kvm::KvmVirt; impl KvmArch for KvmVirt { - fn arch_post_init(&mut self) -> anyhow::Result<()> { + fn arch_post_init(&mut self) -> Result<()> { { let pit_config = kvm_pit_config::default(); self.vm_fd.create_pit2(pit_config).unwrap(); From d4494417b31ce97afa802c22a66c6c3da4173431 Mon Sep 17 00:00:00 2001 From: Zhang Junyu Date: Sat, 28 Feb 2026 23:53:12 +0800 Subject: [PATCH 9/9] refine: Refine err --- crates/vm-machine/src/error.rs | 3 --- crates/vm-machine/src/vm.rs | 15 ++++----------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/crates/vm-machine/src/error.rs b/crates/vm-machine/src/error.rs index ff7f868..a93f216 100644 --- a/crates/vm-machine/src/error.rs +++ b/crates/vm-machine/src/error.rs @@ -9,9 +9,6 @@ pub enum Error { #[error("Failed to init irqchip, error: {0}")] InitIrqchip(String), - #[error("Failed to post init, error: {0}")] - PostInit(String), - #[error("Failed to init device, error: {0}")] InitDevice(String), diff --git a/crates/vm-machine/src/vm.rs b/crates/vm-machine/src/vm.rs index aa571ce..de49f74 100644 --- a/crates/vm-machine/src/vm.rs +++ b/crates/vm-machine/src/vm.rs @@ -2,7 +2,6 @@ use std::marker::PhantomData; use std::sync::Arc; use std::sync::Mutex; -use anyhow::anyhow; use vm_bootloader::boot_loader::BootLoader; use vm_core::arch::layout::MemoryLayout; use vm_core::debug::gdbstub::GdbStub; @@ -63,8 +62,7 @@ where let mut memory_regions = MemoryAddressSpace::default(); memory_regions .try_insert(memory_region) - .map_err(|_| anyhow!("Failed to insert memory_region")) - .map_err(|err| Error::InitMemory(err.to_string()))?; + .map_err(|_| Error::InitMemory("Failed to insert memory_region".to_string()))?; Ok(memory_regions) } @@ -76,21 +74,16 @@ where let mmio_layout = MmioLayout::new(layout.get_mmio_start(), layout.get_mmio_len()); let irq_chip = if !self.devices.iter().any(Device::is_irq_chip) { - Some( - virt.init_irq() - .map_err(|err| Error::InitIrqchip(err.to_string()))?, - ) + Some(virt.init_irq()?) } else { None }; let mut memory = self.init_mm(layout.get_ram_base())?; - virt.init_memory(&mmio_layout, &mut memory, self.memory_size as u64) - .map_err(|err| Error::InitMemory(err.to_string()))?; + virt.init_memory(&mmio_layout, &mut memory, self.memory_size as u64)?; let memory = Arc::new(Mutex::new(memory)); - virt.post_init() - .map_err(|err| Error::PostInit(err.to_string()))?; + virt.post_init()?; let mut device_manager = DeviceManager::new(mmio_layout); device_manager