diff --git a/fuzz/fuzz_targets/http_api.rs b/fuzz/fuzz_targets/http_api.rs index e9965cedd..6c00216a0 100644 --- a/fuzz/fuzz_targets/http_api.rs +++ b/fuzz/fuzz_targets/http_api.rs @@ -132,6 +132,7 @@ impl RequestHandler for StubApiRequestHandler { max_phys_bits: 46, affinity: None, features: CpuFeatures::default(), + nested: true, }, memory: MemoryConfig { size: 536_870_912, diff --git a/src/main.rs b/src/main.rs index a5ff044f9..10d73b594 100644 --- a/src/main.rs +++ b/src/main.rs @@ -213,7 +213,8 @@ fn get_cli_options_sorted( topology=:::,\ kvm_hyperv=on|off,max_phys_bits=,\ affinity=,\ - features=", + features=,\ + nested=on|off", ) .default_value(default_vcpus) .group("vm-config"), @@ -962,6 +963,7 @@ mod unit_tests { max_phys_bits: 46, affinity: None, features: CpuFeatures::default(), + nested: true, }, memory: MemoryConfig { size: 536_870_912, diff --git a/vmm/src/config.rs b/vmm/src/config.rs index 3c99eb26f..c5a74d5e4 100644 --- a/vmm/src/config.rs +++ b/vmm/src/config.rs @@ -598,7 +598,8 @@ impl CpusConfig { .add("kvm_hyperv") .add("max_phys_bits") .add("affinity") - .add("features"); + .add("features") + .add("nested"); parser.parse(cpus).map_err(Error::ParseCpus)?; let boot_vcpus: u32 = parser @@ -653,6 +654,11 @@ impl CpusConfig { }?; } + let nested = parser + .convert::("nested") + .map_err(Error::ParseCpus)? + .is_none_or(|toggle| toggle.0); + Ok(CpusConfig { boot_vcpus, max_vcpus, @@ -661,6 +667,7 @@ impl CpusConfig { max_phys_bits, affinity, features, + nested, }) } } diff --git a/vmm/src/lib.rs b/vmm/src/lib.rs index afb4d5215..f4b46dc4b 100644 --- a/vmm/src/lib.rs +++ b/vmm/src/lib.rs @@ -215,7 +215,7 @@ impl From<&VmConfig> for hypervisor::HypervisorVmConfig { fn from(_value: &VmConfig) -> Self { hypervisor::HypervisorVmConfig { #[cfg(feature = "tdx")] - tdx_enabled: _value.platform.as_ref().map(|p| p.tdx).unwrap_or(false), + tdx_enabled: _value.platform.as_ref().is_some_and(|p| p.tdx), #[cfg(feature = "sev_snp")] sev_snp_enabled: _value.is_sev_snp_enabled(), #[cfg(feature = "sev_snp")] @@ -2397,6 +2397,7 @@ mod unit_tests { max_phys_bits: 46, affinity: None, features: CpuFeatures::default(), + nested: true, }, memory: MemoryConfig { size: 536_870_912, diff --git a/vmm/src/vm_config.rs b/vmm/src/vm_config.rs index 662a9b409..9c28e536d 100644 --- a/vmm/src/vm_config.rs +++ b/vmm/src/vm_config.rs @@ -69,6 +69,8 @@ pub struct CpusConfig { pub affinity: Option>, #[serde(default)] pub features: CpuFeatures, + #[serde(default = "default_cpusconfig_nested")] + pub nested: bool, } pub const DEFAULT_VCPUS: u32 = 1; @@ -83,6 +85,7 @@ impl Default for CpusConfig { max_phys_bits: DEFAULT_MAX_PHYS_BITS, affinity: None, features: CpuFeatures::default(), + nested: true, } } } @@ -177,6 +180,10 @@ fn default_memoryconfig_thp() -> bool { true } +fn default_cpusconfig_nested() -> bool { + true +} + #[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] pub struct MemoryConfig { pub size: u64,