| From 5fff7d270bd6a4759b6d663741b729cdee370257 Mon Sep 17 00:00:00 2001 |
| From: Gleb Natapov <gleb@redhat.com> |
| Date: Thu, 27 Aug 2009 18:41:30 +0300 |
| Subject: KVM: VMX: Fix cr8 exiting control clobbering by EPT |
| |
| From: Gleb Natapov <gleb@redhat.com> |
| |
| commit 5fff7d270bd6a4759b6d663741b729cdee370257 upstream. |
| |
| Don't call adjust_vmx_controls() two times for the same control. |
| It restores options that were dropped earlier. This loses us the cr8 |
| exit control, which causes a massive performance regression Windows x64. |
| |
| Signed-off-by: Gleb Natapov <gleb@redhat.com> |
| Signed-off-by: Avi Kivity <avi@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/x86/kvm/vmx.c | 9 +++------ |
| 1 file changed, 3 insertions(+), 6 deletions(-) |
| |
| --- a/arch/x86/kvm/vmx.c |
| +++ b/arch/x86/kvm/vmx.c |
| @@ -1217,12 +1217,9 @@ static __init int setup_vmcs_config(stru |
| if (_cpu_based_2nd_exec_control & SECONDARY_EXEC_ENABLE_EPT) { |
| /* CR3 accesses and invlpg don't need to cause VM Exits when EPT |
| enabled */ |
| - min &= ~(CPU_BASED_CR3_LOAD_EXITING | |
| - CPU_BASED_CR3_STORE_EXITING | |
| - CPU_BASED_INVLPG_EXITING); |
| - if (adjust_vmx_controls(min, opt, MSR_IA32_VMX_PROCBASED_CTLS, |
| - &_cpu_based_exec_control) < 0) |
| - return -EIO; |
| + _cpu_based_exec_control &= ~(CPU_BASED_CR3_LOAD_EXITING | |
| + CPU_BASED_CR3_STORE_EXITING | |
| + CPU_BASED_INVLPG_EXITING); |
| rdmsr(MSR_IA32_VMX_EPT_VPID_CAP, |
| vmx_capability.ept, vmx_capability.vpid); |
| } |