diff --git a/openhcl/virt_mshv_vtl/src/cvm_cpuid/tdx.rs b/openhcl/virt_mshv_vtl/src/cvm_cpuid/tdx.rs index ae37d026ff..6bc096c7d2 100644 --- a/openhcl/virt_mshv_vtl/src/cvm_cpuid/tdx.rs +++ b/openhcl/virt_mshv_vtl/src/cvm_cpuid/tdx.rs @@ -160,7 +160,27 @@ impl CpuidArchInitializer for TdxCpuidInitializer<'_> { .into_iter() .map(|(leaf, subleaf)| { let subleaf = subleaf.unwrap_or(0); - let result = Self::cpuid(leaf.0, subleaf); + let mut result = Self::cpuid(leaf.0, subleaf); + + // Apply TDX specific fixups. + match leaf { + // Always tell the guest that MCE, MCA, and MTRR are supported. + CpuidFunction::VersionAndFeatures => { + let mut features = cpuid::VersionAndFeaturesEdx::from(result.edx); + features.set_mce(true); + features.set_mca(true); + features.set_mtrr(true); + result.edx = features.into(); + } + CpuidFunction::ExtendedVersionAndFeatures => { + let mut features = cpuid::ExtendedVersionAndFeaturesEdx::from(result.edx); + features.set_mce(true); + features.set_mca(true); + features.set_mtrr(true); + result.edx = features.into(); + } + _ => {} + } ParsedCpuidEntry { leaf,