On 8/12/2025 4:13 AM, Sean Christopherson wrote:
[...]
+void __tdx_mask_cpuid_features(struct kvm_cpuid_entry2 *entry)
+{
+ /*
+ * Only entries with sub-leaf zero need to be masked, but some of these
+ * leaves have other sub-leaves defined. Bail on any non-zero sub-leaf,
+ * so they don't get unintentionally modified.
+ */
+ if (entry->index)
+ return;
+
+ switch (entry->function) {
+ case 0x1:
+ entry->ecx &= ~(CPUID_EXT_VMX | CPUID_EXT_SMX);
+ entry->edx &= ~CPUID_PSE36;
vcpu_clear_cpuid_feature()
+ break;
+ case 0x7:
+ entry->ebx &= ~(CPUID_7_0_EBX_TSC_ADJUST | CPUID_7_0_EBX_SGX);
+ entry->ebx &= ~CPUID_7_0_EBX_INTEL_PT;
+ entry->ecx &= ~CPUID_7_0_ECX_SGX_LC;
+ break;
+ case 0x40000001:
+ entry->eax &= TDX_SUPPORTED_KVM_FEATURES;
+ break;
+ case 0x80000007:
+ entry->edx |= CPUID_APM_INVTSC;
Quite obviously isn't "masking" anything".
Beside that, I guess this is handling fixed1 bit. But why only this bit is
treated specially?