aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/x86.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r--arch/x86/kvm/x86.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 32e3a7ec6ad2..8f83590b47dd 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -490,6 +490,17 @@ static void set_efer(struct kvm_vcpu *vcpu, u64 efer)
490 return; 490 return;
491 } 491 }
492 492
493 if (efer & EFER_FFXSR) {
494 struct kvm_cpuid_entry2 *feat;
495
496 feat = kvm_find_cpuid_entry(vcpu, 0x80000001, 0);
497 if (!feat || !(feat->edx & bit(X86_FEATURE_FXSR_OPT))) {
498 printk(KERN_DEBUG "set_efer: #GP, enable FFXSR w/o CPUID capability\n");
499 kvm_inject_gp(vcpu, 0);
500 return;
501 }
502 }
503
493 if (efer & EFER_SVME) { 504 if (efer & EFER_SVME) {
494 struct kvm_cpuid_entry2 *feat; 505 struct kvm_cpuid_entry2 *feat;
495 506
@@ -1240,6 +1251,7 @@ static void do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,
1240#ifdef CONFIG_X86_64 1251#ifdef CONFIG_X86_64
1241 bit(X86_FEATURE_LM) | 1252 bit(X86_FEATURE_LM) |
1242#endif 1253#endif
1254 bit(X86_FEATURE_FXSR_OPT) |
1243 bit(X86_FEATURE_MMXEXT) | 1255 bit(X86_FEATURE_MMXEXT) |
1244 bit(X86_FEATURE_3DNOWEXT) | 1256 bit(X86_FEATURE_3DNOWEXT) |
1245 bit(X86_FEATURE_3DNOW); 1257 bit(X86_FEATURE_3DNOW);