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/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineConfig.java b/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineConfig.java
index 6311168..83b234d 100644
--- a/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineConfig.java
+++ b/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineConfig.java
@@ -41,6 +41,7 @@
import android.os.PersistableBundle;
import android.sysprop.HypervisorProperties;
import android.system.virtualizationservice.AssignedDevices;
+import android.system.virtualizationservice.CpuOptions;
import android.system.virtualizationservice.DiskImage;
import android.system.virtualizationservice.Partition;
import android.system.virtualizationservice.SharedPath;
@@ -806,7 +807,16 @@
.orElse(null);
config.protectedVm = this.mProtectedVm;
config.memoryMib = bytesToMebiBytes(mMemoryBytes);
- config.cpuTopology = (byte) this.mCpuTopology;
+ switch (this.mCpuTopology) {
+ case CPU_TOPOLOGY_MATCH_HOST:
+ config.cpuOptions = new CpuOptions();
+ config.cpuOptions.cpuTopology = CpuOptions.CpuTopology.matchHost(true);
+ break;
+ default:
+ config.cpuOptions = new CpuOptions();
+ config.cpuOptions.cpuTopology = CpuOptions.CpuTopology.cpuCount(1);
+ break;
+ }
config.consoleInputDevice = mConsoleInputDevice;
config.devices = AssignedDevices.devices(EMPTY_STRING_ARRAY);
config.platformVersion = "~1.0";
@@ -867,10 +877,12 @@
vsConfig.memoryMib = bytesToMebiBytes(mMemoryBytes);
switch (mCpuTopology) {
case CPU_TOPOLOGY_MATCH_HOST:
- vsConfig.cpuTopology = android.system.virtualizationservice.CpuTopology.MATCH_HOST;
+ vsConfig.cpuOptions = new CpuOptions();
+ vsConfig.cpuOptions.cpuTopology = CpuOptions.CpuTopology.matchHost(true);
break;
default:
- vsConfig.cpuTopology = android.system.virtualizationservice.CpuTopology.ONE_CPU;
+ vsConfig.cpuOptions = new CpuOptions();
+ vsConfig.cpuOptions.cpuTopology = CpuOptions.CpuTopology.cpuCount(1);
break;
}
diff --git a/libs/libavf/src/lib.rs b/libs/libavf/src/lib.rs
index 6532ace..3fa1b75 100644
--- a/libs/libavf/src/lib.rs
+++ b/libs/libavf/src/lib.rs
@@ -23,7 +23,8 @@
use android_system_virtualizationservice::{
aidl::android::system::virtualizationservice::{
- AssignedDevices::AssignedDevices, CpuTopology::CpuTopology, DiskImage::DiskImage,
+ AssignedDevices::AssignedDevices, CpuOptions::CpuOptions,
+ CpuOptions::CpuTopology::CpuTopology, DiskImage::DiskImage,
IVirtualizationService::IVirtualizationService, VirtualMachineConfig::VirtualMachineConfig,
VirtualMachineRawConfig::VirtualMachineRawConfig,
},
@@ -218,8 +219,7 @@
// SAFETY: `config` is assumed to be a valid, non-null pointer returned by
// AVirtualMachineRawConfig_create. It's the only reference to the object.
let config = unsafe { &mut *config };
- config.cpuTopology = CpuTopology::CUSTOM;
- config.customVcpuCount = n;
+ config.cpuOptions = CpuOptions { cpuTopology: CpuTopology::CpuCount(n) };
}
/// Set whether a virtual machine is protected or not.
diff --git a/libs/libcompos_common/compos_client.rs b/libs/libcompos_common/compos_client.rs
index 6872582..a52104d 100644
--- a/libs/libcompos_common/compos_client.rs
+++ b/libs/libcompos_common/compos_client.rs
@@ -22,7 +22,8 @@
COMPOS_APEX_ROOT, COMPOS_VSOCK_PORT,
};
use android_system_virtualizationservice::aidl::android::system::virtualizationservice::{
- CpuTopology::CpuTopology,
+ CpuOptions::CpuOptions,
+ CpuOptions::CpuTopology::CpuTopology,
IVirtualizationService::IVirtualizationService,
VirtualMachineAppConfig::{
CustomConfig::CustomConfig, DebugLevel::DebugLevel, Payload::Payload,
@@ -120,9 +121,10 @@
let debug_level = if parameters.debug_mode { DebugLevel::FULL } else { DebugLevel::NONE };
let cpu_topology = match parameters.cpu_topology {
- VmCpuTopology::OneCpu => CpuTopology::ONE_CPU,
- VmCpuTopology::MatchHost => CpuTopology::MATCH_HOST,
+ VmCpuTopology::OneCpu => CpuTopology::CpuCount(1),
+ VmCpuTopology::MatchHost => CpuTopology::MatchHost(true),
};
+ let cpu_options = CpuOptions { cpuTopology: cpu_topology };
// The CompOS VM doesn't need to be updatable (by design it should run exactly twice,
// with the same APKs and APEXes each time). And having it so causes some interesting
@@ -141,7 +143,7 @@
extraIdsigs: extra_idsigs,
protectedVm: true,
memoryMib: parameters.memory_mib.unwrap_or(0), // 0 means use the default
- cpuTopology: cpu_topology,
+ cpuOptions: cpu_options,
customConfig: custom_config,
..Default::default()
});
diff --git a/libs/libservice_vm_manager/src/lib.rs b/libs/libservice_vm_manager/src/lib.rs
index 0f322bb..667731f 100644
--- a/libs/libservice_vm_manager/src/lib.rs
+++ b/libs/libservice_vm_manager/src/lib.rs
@@ -17,7 +17,7 @@
use android_system_virtualizationservice::{
aidl::android::system::virtualizationservice::{
- CpuTopology::CpuTopology, DiskImage::DiskImage,
+ CpuOptions::CpuOptions, CpuOptions::CpuTopology::CpuTopology, DiskImage::DiskImage,
IVirtualizationService::IVirtualizationService, Partition::Partition,
PartitionType::PartitionType, VirtualMachineConfig::VirtualMachineConfig,
VirtualMachineRawConfig::VirtualMachineRawConfig,
@@ -226,6 +226,7 @@
writable: true,
guid: None,
}];
+ let cpu_options = CpuOptions { cpuTopology: CpuTopology::CpuCount(1) };
let rialto = File::open(RIALTO_PATH).context("Failed to open Rialto kernel binary")?;
let instance_id_file = Path::new(VIRT_DATA_DIR).join(INSTANCE_ID_FILENAME);
let instance_id = get_or_allocate_instance_id(service.as_ref(), instance_id_file)?;
@@ -236,7 +237,7 @@
instanceId: instance_id,
protectedVm: true,
memoryMib: VM_MEMORY_MB,
- cpuTopology: CpuTopology::ONE_CPU,
+ cpuOptions: cpu_options,
platformVersion: "~1.0".to_string(),
gdbPort: 0, // No gdb
..Default::default()
diff --git a/libs/vmconfig/src/lib.rs b/libs/vmconfig/src/lib.rs
index 8357f99..859ca77 100644
--- a/libs/vmconfig/src/lib.rs
+++ b/libs/vmconfig/src/lib.rs
@@ -15,14 +15,14 @@
//! Struct for VM configuration with JSON (de)serialization and AIDL parcelables
use android_system_virtualizationservice::{
- aidl::android::system::virtualizationservice::AssignedDevices::AssignedDevices,
- aidl::android::system::virtualizationservice::CpuTopology::CpuTopology,
- aidl::android::system::virtualizationservice::DiskImage::DiskImage as AidlDiskImage,
- aidl::android::system::virtualizationservice::Partition::Partition as AidlPartition,
- aidl::android::system::virtualizationservice::UsbConfig::UsbConfig as AidlUsbConfig,
- aidl::android::system::virtualizationservice::VirtualMachineAppConfig::DebugLevel::DebugLevel,
- aidl::android::system::virtualizationservice::VirtualMachineConfig::VirtualMachineConfig,
- aidl::android::system::virtualizationservice::VirtualMachineRawConfig::VirtualMachineRawConfig,
+ aidl::android::system::virtualizationservice::{
+ AssignedDevices::AssignedDevices, CpuOptions::CpuOptions,
+ CpuOptions::CpuTopology::CpuTopology, DiskImage::DiskImage as AidlDiskImage,
+ Partition::Partition as AidlPartition, UsbConfig::UsbConfig as AidlUsbConfig,
+ VirtualMachineAppConfig::DebugLevel::DebugLevel,
+ VirtualMachineConfig::VirtualMachineConfig,
+ VirtualMachineRawConfig::VirtualMachineRawConfig,
+ },
binder::ParcelFileDescriptor,
};
@@ -109,11 +109,12 @@
0
};
let cpu_topology = match self.cpu_topology.as_deref() {
- None => CpuTopology::ONE_CPU,
- Some("one_cpu") => CpuTopology::ONE_CPU,
- Some("match_host") => CpuTopology::MATCH_HOST,
+ None => CpuTopology::CpuCount(1),
+ Some("one_cpu") => CpuTopology::CpuCount(1),
+ Some("match_host") => CpuTopology::MatchHost(true),
Some(cpu_topology) => bail!("Invalid cpu topology {}", cpu_topology),
};
+ let cpu_options = CpuOptions { cpuTopology: cpu_topology };
let usb_config = self.usb_config.clone().map(|x| x.to_parcelable()).transpose()?;
Ok(VirtualMachineRawConfig {
kernel: maybe_open_parcel_file(&self.kernel, false)?,
@@ -123,7 +124,7 @@
disks: self.disks.iter().map(DiskImage::to_parcelable).collect::<Result<_, Error>>()?,
protectedVm: self.protected,
memoryMib: memory_mib,
- cpuTopology: cpu_topology,
+ cpuOptions: cpu_options,
platformVersion: self.platform_version.to_string(),
devices: AssignedDevices::Devices(
self.devices