From a6058143b1cada7463443bd2c84894eba1fb2f78 Mon Sep 17 00:00:00 2001 From: YanLien Date: Tue, 6 Jan 2026 09:01:24 +0800 Subject: [PATCH] feat: add memory size and vCPU count to VmDataInner and expose methods in Vm --- src/vm/data.rs | 18 ++++++++++++++++++ src/vm/mod.rs | 12 +++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/vm/data.rs b/src/vm/data.rs index 07f7964..7214e68 100644 --- a/src/vm/data.rs +++ b/src/vm/data.rs @@ -20,17 +20,35 @@ pub(crate) struct VmDataInner { pub name: String, pub machine: RwLock, pub status: AtomicState, + pub memory_size: usize, + pub vcpu_num: usize, error: RwLock>, } impl VmDataInner { pub fn new(config: AxVMConfig) -> Self { + // Calculate total memory size + let memory_size = config + .memory_regions + .iter() + .map(|region| match region { + crate::config::MemoryKind::Identical { size } => *size, + crate::config::MemoryKind::Reserved { size, .. } => *size, + crate::config::MemoryKind::Vmem { size, .. } => *size, + }) + .sum(); + + // Get vCPU count + let vcpu_num = config.cpu_num.num(); + Self { id: config.id.into(), name: config.name.clone(), machine: RwLock::new(VmMachineState::Uninit(VmMachineUninit::new(config))), status: AtomicState::new(VMStatus::Uninit), error: RwLock::new(None), + memory_size, + vcpu_num, } } diff --git a/src/vm/mod.rs b/src/vm/mod.rs index 3281d27..f80c08b 100644 --- a/src/vm/mod.rs +++ b/src/vm/mod.rs @@ -7,7 +7,7 @@ mod machine; pub(crate) use addrspace::*; pub use define::*; -pub(crate) use machine::*; +pub use machine::*; pub struct Vm { data: VmData, @@ -44,4 +44,14 @@ impl Vm { pub fn wait(&self) -> anyhow::Result<()> { self.data.wait() } + + /// Get total memory size in bytes. + pub fn memory_size(&self) -> usize { + self.data.memory_size + } + + /// Get vCPU count. + pub fn vcpu_num(&self) -> usize { + self.data.vcpu_num + } }