|
@@ -4572,14 +4572,26 @@ static u64 svm_get_mt_mask(struct kvm_vcpu *vcpu, gfn_t gfn, bool is_mmio)
|
|
|
static void svm_cpuid_update(struct kvm_vcpu *vcpu)
|
|
|
{
|
|
|
struct vcpu_svm *svm = to_svm(vcpu);
|
|
|
+ struct kvm_cpuid_entry2 *entry;
|
|
|
|
|
|
/* Update nrips enabled cache */
|
|
|
svm->nrips_enabled = !!guest_cpuid_has_nrips(&svm->vcpu);
|
|
|
+
|
|
|
+ if (!kvm_vcpu_apicv_active(vcpu))
|
|
|
+ return;
|
|
|
+
|
|
|
+ entry = kvm_find_cpuid_entry(vcpu, 1, 0);
|
|
|
+ if (entry)
|
|
|
+ entry->ecx &= ~bit(X86_FEATURE_X2APIC);
|
|
|
}
|
|
|
|
|
|
static void svm_set_supported_cpuid(u32 func, struct kvm_cpuid_entry2 *entry)
|
|
|
{
|
|
|
switch (func) {
|
|
|
+ case 0x1:
|
|
|
+ if (avic)
|
|
|
+ entry->ecx &= ~bit(X86_FEATURE_X2APIC);
|
|
|
+ break;
|
|
|
case 0x80000001:
|
|
|
if (nested)
|
|
|
entry->ecx |= (1 << 2); /* Set SVM bit */
|