Adding parameter for trusty_security_vm_launcher vCPU configuration
vCPU configuration:
ONE_CPU (default): --cpu-topology one-cpu
MATCH_HOST: --cpu-topology match-host
Bug: 361761876
Test: /system_ext/bin/trusty_security_vm_launcher \
--kernel /system_ext/etc/hw/desktop_lk_test.elf \
--memory-size-mib 192 \
--cpu-topology match-host
Change-Id: I2ec4b29431fc4b93ad0fab887812ed72bbe8beea
diff --git a/guest/trusty/security_vm/launcher/src/main.rs b/guest/trusty/security_vm/launcher/src/main.rs
index bdb4ed8..9611f26 100644
--- a/guest/trusty/security_vm/launcher/src/main.rs
+++ b/guest/trusty/security_vm/launcher/src/main.rs
@@ -15,8 +15,8 @@
//! A client for trusty security VMs during early boot.
use android_system_virtualizationservice::aidl::android::system::virtualizationservice::{
- IVirtualizationService::IVirtualizationService, VirtualMachineConfig::VirtualMachineConfig,
- VirtualMachineRawConfig::VirtualMachineRawConfig,
+ CpuTopology::CpuTopology, IVirtualizationService::IVirtualizationService,
+ VirtualMachineConfig::VirtualMachineConfig, VirtualMachineRawConfig::VirtualMachineRawConfig,
};
use android_system_virtualizationservice::binder::{ParcelFileDescriptor, Strong};
use anyhow::{Context, Result};
@@ -26,7 +26,8 @@
use vmclient::VmInstance;
#[derive(Parser)]
-struct Args {
+/// Collection of CLI for trusty_security_vm_launcher
+pub struct Args {
/// Path to the trusty kernel image.
#[arg(long)]
kernel: PathBuf,
@@ -42,6 +43,10 @@
/// Memory size of the VM in MiB
#[arg(long, default_value_t = 128)]
memory_size_mib: i32,
+
+ /// CPU Topology exposed to the VM <one-cpu|match-host>
+ #[arg(long, default_value = "one-cpu", value_parser = parse_cpu_topology)]
+ cpu_topology: CpuTopology,
}
fn get_service() -> Result<Strong<dyn IVirtualizationService>> {
@@ -50,6 +55,14 @@
virtmgr.connect().context("Failed to connect to VirtualizationService")
}
+fn parse_cpu_topology(s: &str) -> Result<CpuTopology, String> {
+ match s {
+ "one-cpu" => Ok(CpuTopology::ONE_CPU),
+ "match-host" => Ok(CpuTopology::MATCH_HOST),
+ _ => Err(format!("Invalid cpu topology {}", s)),
+ }
+}
+
fn main() -> Result<()> {
let args = Args::parse();
@@ -63,6 +76,7 @@
kernel: Some(ParcelFileDescriptor::new(kernel)),
protectedVm: args.protected,
memoryMib: args.memory_size_mib,
+ cpuTopology: args.cpu_topology,
platformVersion: "~1.0".to_owned(),
// TODO: add instanceId
..Default::default()