diff --git a/crates/vm-core/src/cpu/vm_exit.rs b/crates/vm-core/src/cpu/vm_exit.rs index 1971c1d..632065f 100644 --- a/crates/vm-core/src/cpu/vm_exit.rs +++ b/crates/vm-core/src/cpu/vm_exit.rs @@ -1,8 +1,5 @@ use thiserror::Error; -#[cfg(target_arch = "aarch64")] -use crate::arch::aarch64::vcpu::AArch64Vcpu; - #[derive(Error, Debug)] pub enum VmExitHandlerError { #[error("no device found for port 0x{0:#x}")] @@ -37,5 +34,8 @@ pub trait VmExit: Send + Sync { fn in_mmio_region(&self, addr: u64) -> bool; #[cfg(target_arch = "aarch64")] - fn call_smc(&self, vcpu: &mut dyn AArch64Vcpu) -> Result<(), VmExitHandlerError>; + fn call_smc( + &self, + vcpu: &mut dyn crate::arch::aarch64::vcpu::AArch64Vcpu, + ) -> Result<(), VmExitHandlerError>; } diff --git a/crates/vm-core/src/monitor.rs b/crates/vm-core/src/monitor.rs index 16bcc05..60fccaf 100644 --- a/crates/vm-core/src/monitor.rs +++ b/crates/vm-core/src/monitor.rs @@ -12,9 +12,6 @@ pub enum MonitorError { #[error("{0}")] Serde(#[from] serde_json::Error), - #[error("Unknown cmd {0}")] - UnknownCmd(String), - #[error("unknown subcommand {0:?}")] UnknownSubcommand(Vec), @@ -23,6 +20,6 @@ pub enum MonitorError { } #[async_trait] -pub trait MonitorCommand: Send + Sync { +pub trait MonitorCommandOps: Send + Sync { async fn handle_command(&self, subcommands: &[&str]) -> Result; } diff --git a/crates/vm-device/src/device/virtio/virtio_balloon_traditional/monitor.rs b/crates/vm-device/src/device/virtio/virtio_balloon_traditional/monitor.rs index bfb989c..fc60dce 100644 --- a/crates/vm-device/src/device/virtio/virtio_balloon_traditional/monitor.rs +++ b/crates/vm-device/src/device/virtio/virtio_balloon_traditional/monitor.rs @@ -3,7 +3,7 @@ use std::sync::Mutex; use async_trait::async_trait; use serde::Serialize; -use vm_core::monitor::MonitorCommand; +use vm_core::monitor::MonitorCommandOps; use vm_core::monitor::MonitorError; use vm_virtio::transport::VirtioDev; @@ -27,7 +27,7 @@ impl VirtioBalloonMonitor { } #[async_trait] -impl MonitorCommand for VirtioBalloonMonitor { +impl MonitorCommandOps for VirtioBalloonMonitor { async fn handle_command(&self, subcommands: &[&str]) -> Result { match *subcommands { ["info"] => { diff --git a/crates/vm-vmm/src/error.rs b/crates/vm-vmm/src/error.rs index c49cdad..f296cba 100644 --- a/crates/vm-vmm/src/error.rs +++ b/crates/vm-vmm/src/error.rs @@ -42,9 +42,6 @@ pub enum Error { #[error("Failed to setup with bootloader, error: {0}")] Bootloader(#[from] vm_bootloader::boot_loader::Error), - #[error("gdb_stub failed, error: {0}")] - GdbStub(String), - #[error("monitor error: {0}")] Monitor(#[from] MonitorError), } diff --git a/crates/vm-vmm/src/firmware.rs b/crates/vm-vmm/src/firmware.rs index fa0b5b8..d4ca20e 100644 --- a/crates/vm-vmm/src/firmware.rs +++ b/crates/vm-vmm/src/firmware.rs @@ -1,3 +1,3 @@ #[allow(warnings)] #[cfg(target_arch = "x86_64")] -pub mod bios; +pub(crate) mod bios; diff --git a/crates/vm-vmm/src/service.rs b/crates/vm-vmm/src/service.rs index ce0f625..e9eaf45 100644 --- a/crates/vm-vmm/src/service.rs +++ b/crates/vm-vmm/src/service.rs @@ -1,2 +1,2 @@ -pub mod gdbstub; -pub mod monitor; +pub(crate) mod gdbstub; +pub(crate) mod monitor; diff --git a/crates/vm-vmm/src/service/monitor/builder.rs b/crates/vm-vmm/src/service/monitor/builder.rs index ce6582c..fb4a87f 100644 --- a/crates/vm-vmm/src/service/monitor/builder.rs +++ b/crates/vm-vmm/src/service/monitor/builder.rs @@ -1,18 +1,18 @@ use std::collections::HashMap; -use vm_core::monitor::MonitorCommand; +use vm_core::monitor::MonitorCommandOps; use vm_core::monitor::MonitorError; #[derive(Default)] pub struct MonitorServerBuilder { - pub components: HashMap>, + pub components: HashMap>, } impl MonitorServerBuilder { pub fn register_command_handler( &mut self, name: &str, - handler: Box, + handler: Box, ) -> Result<(), MonitorError> { let name = name.to_string(); diff --git a/crates/vm-vmm/src/vm.rs b/crates/vm-vmm/src/vm.rs index fe05ca3..a4e2163 100644 --- a/crates/vm-vmm/src/vm.rs +++ b/crates/vm-vmm/src/vm.rs @@ -25,7 +25,7 @@ use vm_core::arch::x86_64::layout::RAM_BASE; use vm_core::cpu::vcpu_manager::VcpuManager; use vm_core::device::mmio::layout::MmioLayout; use vm_core::device_manager::DeviceManager; -use vm_core::monitor::MonitorCommand; +use vm_core::monitor::MonitorCommandOps; use vm_core::virtualization::hypervisor::Hypervisor; use vm_core::virtualization::vm::HypervisorVm; use vm_core::virtualization::vm::SetUserMemoryRegionFlags; @@ -47,7 +47,7 @@ use crate::vmm::handler::VmmCommand; pub mod config; -pub(crate) mod vm_exit_handler; +mod vm_exit_handler; const PAGE_SIZE: usize = 4 << 10; @@ -58,7 +58,7 @@ pub struct Vm { _irq_chip: Arc, _device_manager: Arc, gdb_stub: Option, - monitor_handlers: HashMap>, + monitor_handlers: HashMap>, _vm_config: VmConfig, #[cfg(target_arch = "aarch64")] start_pc: u64, @@ -113,11 +113,11 @@ impl Vm { vcpu_manager: vcpu_manager.clone(), }; - let vm_exit_handler = Arc::new(VmExitHandler { - device_manager: device_manager.clone(), + let vm_exit_handler = Arc::new(VmExitHandler::new( + device_manager.clone(), #[cfg(target_arch = "aarch64")] psci, - }); + )); { let mut vcpu_manager = vcpu_manager.lock().await; @@ -180,7 +180,7 @@ impl Vm { self.memory_address_space.as_ref() } - pub fn monitor_handlers(&self) -> &HashMap> { + pub fn monitor_handlers(&self) -> &HashMap> { &self.monitor_handlers } diff --git a/crates/vm-vmm/src/vm/vm_exit_handler.rs b/crates/vm-vmm/src/vm/vm_exit_handler.rs index 81f6b17..901015d 100644 --- a/crates/vm-vmm/src/vm/vm_exit_handler.rs +++ b/crates/vm-vmm/src/vm/vm_exit_handler.rs @@ -11,9 +11,22 @@ use vm_core::cpu::vm_exit::VmExitHandlerError; use vm_core::device_manager::DeviceManager; pub struct VmExitHandler { - pub device_manager: Arc, + device_manager: Arc, #[cfg(target_arch = "aarch64")] - pub psci: Psci02, + psci: Psci02, +} + +impl VmExitHandler { + pub fn new( + device_manager: Arc, + #[cfg(target_arch = "aarch64")] psci: Psci02, + ) -> Self { + VmExitHandler { + device_manager, + #[cfg(target_arch = "aarch64")] + psci, + } + } } impl VmExit for VmExitHandler { diff --git a/crates/vm-vmm/src/vmm.rs b/crates/vm-vmm/src/vmm.rs index 5766e95..f752bdd 100644 --- a/crates/vm-vmm/src/vmm.rs +++ b/crates/vm-vmm/src/vmm.rs @@ -11,7 +11,7 @@ use crate::vm::Vm; use crate::vm::config::VmConfig; use crate::vmm::handler::VmmCommand; -pub mod handler; +pub(crate) mod handler; mod service;