Message ID | 9b00cb86878e9986f47a0febce3c0d2872d91443.1625186503.git.isaku.yamahata@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: X86: TDX support | expand |
On 03/07/21 00:04, isaku.yamahata@intel.com wrote: > Let userspace, or in the case of TDX, KVM itself, enable X2APIC even if > X2APIC is not reported as supported in the guest's CPU model. KVM > generally does not force specific ordering between ioctls(), e.g. this > forces userspace to configure CPUID before MSRs. You already have to do this, see for example MSR_IA32_PERF_CAPABILITIES: struct kvm_msr_entry msr_ent = {.index = msr, .data = 0}; if (!msr_info->host_initiated) return 1; if (guest_cpuid_has(vcpu, X86_FEATURE_PDCM) && kvm_get_msr_feature(&msr_ent)) return 1; if (data & ~msr_ent.data) return 1; Is this patch necessary? If not, I think it can be dropped. Paolo > And for TDX, vCPUs > will always run with X2APIC enabled, e.g. KVM will want/need to enable > X2APIC from time zero.
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 3407870b6f44..c231a88d5946 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -437,8 +437,11 @@ int kvm_set_apic_base(struct kvm_vcpu *vcpu, struct msr_data *msr_info) { enum lapic_mode old_mode = kvm_get_apic_mode(vcpu); enum lapic_mode new_mode = kvm_apic_mode(msr_info->data); - u64 reserved_bits = kvm_vcpu_reserved_gpa_bits_raw(vcpu) | 0x2ff | - (guest_cpuid_has(vcpu, X86_FEATURE_X2APIC) ? 0 : X2APIC_ENABLE); + u64 reserved_bits = kvm_vcpu_reserved_gpa_bits_raw(vcpu) | 0x2ff; + + if (!msr_info->host_initiated && + !guest_cpuid_has(vcpu, X86_FEATURE_X2APIC)) + reserved_bits |= X2APIC_ENABLE; if ((msr_info->data & reserved_bits) != 0 || new_mode == LAPIC_MODE_INVALID) return 1;