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?