diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kvm/svm.c | 3 | ||||
-rw-r--r-- | arch/x86/kvm/vmx.c | 4 | ||||
-rw-r--r-- | arch/x86/kvm/x86.c | 10 |
3 files changed, 16 insertions, 1 deletions
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 1a582f1090e8..ff3bc74af728 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c | |||
@@ -403,6 +403,9 @@ static __init int svm_hardware_setup(void) | |||
403 | set_msr_interception(msrpm_va, MSR_IA32_SYSENTER_ESP, 1, 1); | 403 | set_msr_interception(msrpm_va, MSR_IA32_SYSENTER_ESP, 1, 1); |
404 | set_msr_interception(msrpm_va, MSR_IA32_SYSENTER_EIP, 1, 1); | 404 | set_msr_interception(msrpm_va, MSR_IA32_SYSENTER_EIP, 1, 1); |
405 | 405 | ||
406 | if (boot_cpu_has(X86_FEATURE_NX)) | ||
407 | kvm_enable_efer_bits(EFER_NX); | ||
408 | |||
406 | for_each_online_cpu(cpu) { | 409 | for_each_online_cpu(cpu) { |
407 | r = svm_cpu_init(cpu); | 410 | r = svm_cpu_init(cpu); |
408 | if (r) | 411 | if (r) |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 1157e8a4059b..a509910f6b53 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -1117,6 +1117,10 @@ static __init int hardware_setup(void) | |||
1117 | { | 1117 | { |
1118 | if (setup_vmcs_config(&vmcs_config) < 0) | 1118 | if (setup_vmcs_config(&vmcs_config) < 0) |
1119 | return -EIO; | 1119 | return -EIO; |
1120 | |||
1121 | if (boot_cpu_has(X86_FEATURE_NX)) | ||
1122 | kvm_enable_efer_bits(EFER_NX); | ||
1123 | |||
1120 | return alloc_kvm_area(); | 1124 | return alloc_kvm_area(); |
1121 | } | 1125 | } |
1122 | 1126 | ||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index ec9265b354b0..db16f2353e4b 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -41,7 +41,15 @@ | |||
41 | | X86_CR4_OSXMMEXCPT | X86_CR4_VMXE)) | 41 | | X86_CR4_OSXMMEXCPT | X86_CR4_VMXE)) |
42 | 42 | ||
43 | #define CR8_RESERVED_BITS (~(unsigned long)X86_CR8_TPR) | 43 | #define CR8_RESERVED_BITS (~(unsigned long)X86_CR8_TPR) |
44 | static u64 __read_mostly efer_reserved_bits = 0xfffffffffffff2fe; | 44 | /* EFER defaults: |
45 | * - enable syscall per default because its emulated by KVM | ||
46 | * - enable LME and LMA per default on 64 bit KVM | ||
47 | */ | ||
48 | #ifdef CONFIG_X86_64 | ||
49 | static u64 __read_mostly efer_reserved_bits = 0xfffffffffffffafeULL; | ||
50 | #else | ||
51 | static u64 __read_mostly efer_reserved_bits = 0xfffffffffffffffeULL; | ||
52 | #endif | ||
45 | 53 | ||
46 | #define VM_STAT(x) offsetof(struct kvm, stat.x), KVM_STAT_VM | 54 | #define VM_STAT(x) offsetof(struct kvm, stat.x), KVM_STAT_VM |
47 | #define VCPU_STAT(x) offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU | 55 | #define VCPU_STAT(x) offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU |