aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/x86.c
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2009-02-02 10:23:51 -0500
committerAvi Kivity <avi@redhat.com>2009-03-24 05:03:08 -0400
commit1b2fd70c4eddef53f32639296818c0253e7ca48d (patch)
tree4ab2254a7a93f75793b69c7a012a4d3556983b44 /arch/x86/kvm/x86.c
parentd20626936dd6aa783760e780dae5abb127564316 (diff)
KVM: Add FFXSR support
AMD K10 CPUs implement the FFXSR feature that gets enabled using EFER. Let's check if the virtual CPU description includes that CPUID feature bit and allow enabling it then. This is required for Windows Server 2008 in Hyper-V mode. v2 adds CPUID capability exposure Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Avi Kivity <avi@redhat.com>
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);