diff options
Diffstat (limited to 'arch/x86/kvm/vmx.c')
-rw-r--r-- | arch/x86/kvm/vmx.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 73cb5dd960c..a187570e483 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -1138,12 +1138,15 @@ static __init int vmx_disabled_by_bios(void) | |||
1138 | /* locked but not enabled */ | 1138 | /* locked but not enabled */ |
1139 | } | 1139 | } |
1140 | 1140 | ||
1141 | static void hardware_enable(void *garbage) | 1141 | static int hardware_enable(void *garbage) |
1142 | { | 1142 | { |
1143 | int cpu = raw_smp_processor_id(); | 1143 | int cpu = raw_smp_processor_id(); |
1144 | u64 phys_addr = __pa(per_cpu(vmxarea, cpu)); | 1144 | u64 phys_addr = __pa(per_cpu(vmxarea, cpu)); |
1145 | u64 old; | 1145 | u64 old; |
1146 | 1146 | ||
1147 | if (read_cr4() & X86_CR4_VMXE) | ||
1148 | return -EBUSY; | ||
1149 | |||
1147 | INIT_LIST_HEAD(&per_cpu(vcpus_on_cpu, cpu)); | 1150 | INIT_LIST_HEAD(&per_cpu(vcpus_on_cpu, cpu)); |
1148 | rdmsrl(MSR_IA32_FEATURE_CONTROL, old); | 1151 | rdmsrl(MSR_IA32_FEATURE_CONTROL, old); |
1149 | if ((old & (FEATURE_CONTROL_LOCKED | | 1152 | if ((old & (FEATURE_CONTROL_LOCKED | |
@@ -1158,6 +1161,10 @@ static void hardware_enable(void *garbage) | |||
1158 | asm volatile (ASM_VMX_VMXON_RAX | 1161 | asm volatile (ASM_VMX_VMXON_RAX |
1159 | : : "a"(&phys_addr), "m"(phys_addr) | 1162 | : : "a"(&phys_addr), "m"(phys_addr) |
1160 | : "memory", "cc"); | 1163 | : "memory", "cc"); |
1164 | |||
1165 | ept_sync_global(); | ||
1166 | |||
1167 | return 0; | ||
1161 | } | 1168 | } |
1162 | 1169 | ||
1163 | static void vmclear_local_vcpus(void) | 1170 | static void vmclear_local_vcpus(void) |
@@ -4040,8 +4047,6 @@ static int __init vmx_init(void) | |||
4040 | if (bypass_guest_pf) | 4047 | if (bypass_guest_pf) |
4041 | kvm_mmu_set_nonpresent_ptes(~0xffeull, 0ull); | 4048 | kvm_mmu_set_nonpresent_ptes(~0xffeull, 0ull); |
4042 | 4049 | ||
4043 | ept_sync_global(); | ||
4044 | |||
4045 | return 0; | 4050 | return 0; |
4046 | 4051 | ||
4047 | out3: | 4052 | out3: |