Move CpuTopology to CpuOptions
Add CpuOptions for easier expansion of options relating to CPUs.
Bug: N/A
Test: TH, /apex/com.android.virt/bin/vm run-microdroid --cpu-topology cpu_count=#|one_cpu|match_host
Change-Id: I24bc31211448ad9fa5fb80382fcc4626216fe08f
diff --git a/android/vm/src/main.rs b/android/vm/src/main.rs
index 830d56c..ff846a1 100644
--- a/android/vm/src/main.rs
+++ b/android/vm/src/main.rs
@@ -19,7 +19,7 @@
mod run;
use android_system_virtualizationservice::aidl::android::system::virtualizationservice::{
- CpuTopology::CpuTopology, IVirtualizationService::IVirtualizationService,
+ CpuOptions::CpuTopology::CpuTopology, IVirtualizationService::IVirtualizationService,
PartitionType::PartitionType, VirtualMachineAppConfig::DebugLevel::DebugLevel,
};
#[cfg(not(llpvm_changes))]
@@ -379,8 +379,13 @@
fn parse_cpu_topology(s: &str) -> Result<CpuTopology, String> {
match s {
- "one_cpu" => Ok(CpuTopology::ONE_CPU),
- "match_host" => Ok(CpuTopology::MATCH_HOST),
+ "one_cpu" => Ok(CpuTopology::CpuCount(1)),
+ "match_host" => Ok(CpuTopology::MatchHost(true)),
+ _ if s.starts_with("cpu_count=") => {
+ // Safe to unwrap as it's validated the string starts with cpu_count=
+ let val = s.strip_prefix("cpu_count=").unwrap();
+ Ok(CpuTopology::CpuCount(val.parse().map_err(|e| format!("Invalid CPU Count: {}", e))?))
+ }
_ => Err(format!("Invalid cpu topology {}", s)),
}
}
diff --git a/android/vm/src/run.rs b/android/vm/src/run.rs
index 0037327..eaf2522 100644
--- a/android/vm/src/run.rs
+++ b/android/vm/src/run.rs
@@ -17,6 +17,7 @@
use crate::create_partition::command_create_partition;
use crate::{get_service, RunAppConfig, RunCustomVmConfig, RunMicrodroidConfig};
use android_system_virtualizationservice::aidl::android::system::virtualizationservice::{
+ CpuOptions::CpuOptions,
IVirtualizationService::IVirtualizationService,
PartitionType::PartitionType,
VirtualMachineAppConfig::{
@@ -160,6 +161,7 @@
..Default::default()
};
+ let cpu_options = CpuOptions { cpuTopology: config.common.cpu_topology };
if config.debug.enable_earlycon() {
if config.debug.debug != DebugLevel::FULL {
bail!("earlycon is only supported for debuggable VMs")
@@ -188,7 +190,7 @@
debugLevel: config.debug.debug,
protectedVm: config.common.protected,
memoryMib: config.common.mem.unwrap_or(0) as i32, // 0 means use the VM default
- cpuTopology: config.common.cpu_topology,
+ cpuOptions: cpu_options,
customConfig: Some(custom_config),
osName: os_name.to_string(),
hugePages: config.common.hugepages,
@@ -273,7 +275,7 @@
if let Some(gdb) = config.debug.gdb {
vm_config.gdbPort = gdb.get() as i32;
}
- vm_config.cpuTopology = config.common.cpu_topology;
+ vm_config.cpuOptions = CpuOptions { cpuTopology: config.common.cpu_topology.clone() };
vm_config.hugePages = config.common.hugepages;
vm_config.boostUclamp = config.common.boost_uclamp;
vm_config.teeServices = config.common.tee_services().to_vec();