Skip to content

Commit a8ddffa

Browse files
alindimaAlexandruCihodaru
authored andcommitted
cpuid: adapt templates for kernel 5.10
Signed-off-by: alindima <[email protected]>
1 parent f082a91 commit a8ddffa

File tree

5 files changed

+31
-8
lines changed

5 files changed

+31
-8
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# Changelog
22

3+
## [Unreleased]
4+
5+
### Fixed
6+
7+
- Adapt T2 and C3 CPU templates for kernel 5.10. Firecracker was not previously
8+
masking some CPU features of the host or emulated by KVM, introduced in more
9+
recent kernels: `umip`, `vmx`, `avx512_vnni`.
10+
311
## [0.25.1]
412

513
### Added

src/cpuid/src/cpu_leaf.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ pub mod leaf_0x1 {
3434
pub const MONITOR_BITINDEX: u32 = 3;
3535
// CPL Qualified Debug Store
3636
pub const DS_CPL_SHIFT: u32 = 4;
37-
// 5 = VMX (Virtual Machine Extensions)
37+
// Virtual Machine Extensions
38+
pub const VMX_BITINDEX: u32 = 5;
3839
// 6 = SMX (Safer Mode Extensions)
3940
// 7 = EIST (Enhanced Intel SpeedStep® technology)
4041
// TM2 = Thermal Monitor 2
@@ -165,15 +166,22 @@ pub mod leaf_0x7 {
165166
// 0 = PREFETCHWT1 (move data closer to the processor in anticipation of future use)
166167
// AVX512_VBMI = AVX-512 Vector Byte Manipulation Instructions
167168
pub const AVX512_VBMI_BITINDEX: u32 = 1;
168-
// 2 = UMIP (User Mode Instruction Prevention)
169+
// UMIP (User Mode Instruction Prevention)
170+
pub const UMIP_BITINDEX: u32 = 2;
169171
// PKU = Protection Keys for user-mode pages
170172
pub const PKU_BITINDEX: u32 = 3;
171173
// OSPKE = If 1, OS has set CR4.PKE to enable protection keys
172174
pub const OSPKE_BITINDEX: u32 = 4;
173175
// 5 = WAITPKG
174-
// 7-6 reserved
176+
// 6 = AVX512_VBMI2
177+
// 7 reserved
175178
// 8 = GFNI
176-
// 13-09 reserved
179+
// 9 = VAES
180+
// 10 = VPCLMULQDQ
181+
// AVX512_VNNI = Vector Neural Network Instructions
182+
pub const AVX512_VNNI_BITINDEX: u32 = 11;
183+
// 12 = AVX512_BITALG
184+
// 13 = TME
177185
// AVX512_VPOPCNTDQ = Vector population count instruction (Intel® Xeon Phi™ only.)
178186
pub const AVX512_VPOPCNTDQ_BITINDEX: u32 = 14;
179187
// 21 - 17 = The value of MAWAU used by the BNDLDX and BNDSTX instructions in 64-bit mode.

src/cpuid/src/template/intel/c3.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ fn update_feature_info_entry(entry: &mut kvm_cpuid_entry2, _vm_spec: &VmSpec) ->
3131
.write_bit(ecx::DTES64_BITINDEX, false)
3232
.write_bit(ecx::MONITOR_BITINDEX, false)
3333
.write_bit(ecx::DS_CPL_SHIFT, false)
34+
.write_bit(ecx::VMX_BITINDEX, false)
3435
.write_bit(ecx::TM2_BITINDEX, false)
3536
.write_bit(ecx::CNXT_ID_BITINDEX, false)
3637
.write_bit(ecx::SDBG_BITINDEX, false)
@@ -90,8 +91,10 @@ fn update_structured_extended_entry(
9091
entry
9192
.ecx
9293
.write_bit(ecx::AVX512_VBMI_BITINDEX, false)
94+
.write_bit(ecx::UMIP_BITINDEX, false)
9395
.write_bit(ecx::PKU_BITINDEX, false)
9496
.write_bit(ecx::OSPKE_BITINDEX, false)
97+
.write_bit(ecx::AVX512_VNNI_BITINDEX, false)
9598
.write_bit(ecx::AVX512_VPOPCNTDQ_BITINDEX, false)
9699
.write_bit(ecx::RDPID_BITINDEX, false)
97100
.write_bit(ecx::SGX_LC_BITINDEX, false);

src/cpuid/src/template/intel/t2.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ fn update_feature_info_entry(entry: &mut kvm_cpuid_entry2, _vm_spec: &VmSpec) ->
3131
.write_bit(ecx::DTES64_BITINDEX, false)
3232
.write_bit(ecx::MONITOR_BITINDEX, false)
3333
.write_bit(ecx::DS_CPL_SHIFT, false)
34+
.write_bit(ecx::VMX_BITINDEX, false)
3435
.write_bit(ecx::TM2_BITINDEX, false)
3536
.write_bit(ecx::CNXT_ID_BITINDEX, false)
3637
.write_bit(ecx::SDBG_BITINDEX, false)
@@ -84,8 +85,10 @@ fn update_structured_extended_entry(
8485
entry
8586
.ecx
8687
.write_bit(ecx::AVX512_VBMI_BITINDEX, false)
88+
.write_bit(ecx::UMIP_BITINDEX, false)
8789
.write_bit(ecx::PKU_BITINDEX, false)
8890
.write_bit(ecx::OSPKE_BITINDEX, false)
91+
.write_bit(ecx::AVX512_VNNI_BITINDEX, false)
8992
.write_bit(ecx::AVX512_VPOPCNTDQ_BITINDEX, false)
9093
.write_bit(ecx::RDPID_BITINDEX, false)
9194
.write_bit(ecx::SGX_LC_BITINDEX, false);

tests/integration_tests/functional/test_cpu_features.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ def test_cpu_template(test_microvm_with_ssh, network_config, cpu_template):
168168
return
169169

170170
assert test_microvm.api_session.is_status_no_content(
171-
response.status_code)
171+
response.status_code)
172172
check_masked_features(test_microvm, cpu_template)
173173
check_enabled_features(test_microvm, cpu_template)
174174

@@ -181,8 +181,8 @@ def check_masked_features(test_microvm, cpu_template):
181181
"psn", "ds", "acpi", "tm", "ss", "pbe",
182182
"fpdp", "rdt_m", "rdt_a", "mpx", "avx512f",
183183
"intel_pt",
184-
"avx512_vpopcntdq",
185-
"3dnowprefetch", "pdpe1gb"]
184+
"avx512_vpopcntdq", "avx512_vnni",
185+
"3dnowprefetch", "pdpe1gb", "vmx", "umip"]
186186

187187
common_masked_features_cpuid = {"SGX": "false", "HLE": "false",
188188
"RTM": "false", "RDSEED": "false",
@@ -197,7 +197,8 @@ def check_masked_features(test_microvm, cpu_template):
197197
"AVX512_4VNNIW": "false",
198198
"AVX512_4FMAPS": "false",
199199
"XSAVEC": "false", "XGETBV": "false",
200-
"XSAVES": "false"}
200+
"XSAVES": "false", "UMIP": "false",
201+
"VMX": "false"}
201202

202203
# These are all discoverable by cpuid -1.
203204
c3_masked_features = {"FMA": "false", "MOVBE": "false", "BMI": "false",

0 commit comments

Comments
 (0)