diff options
author | Andy Lutomirski <luto@amacapital.net> | 2014-11-10 11:19:15 -0800 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2014-11-12 16:27:21 +0100 |
commit | 54b98bff8ef4ccfc6f638c5ed868d2d51cdde585 (patch) | |
tree | 277011bfa483c42e0f04605f2859eb6cc9142cae /arch/x86/kvm/vmx.c | |
parent | f6577a5fa15d82217ca73c74cd2dcbc0f6c781dd (diff) | |
download | lwn-54b98bff8ef4ccfc6f638c5ed868d2d51cdde585.tar.gz lwn-54b98bff8ef4ccfc6f638c5ed868d2d51cdde585.zip |
x86, kvm, vmx: Don't set LOAD_IA32_EFER when host and guest match
There's nothing to switch if the host and guest values are the same.
I am unable to find evidence that this makes any difference
whatsoever.
Signed-off-by: Andy Lutomirski <luto@amacapital.net>
[I could see a difference on Nehalem. From 5 runs:
userspace exit, guest!=host 12200 11772 12130 12164 12327
userspace exit, guest=host 11983 11780 11920 11919 12040
lightweight exit, guest!=host 3214 3220 3238 3218 3337
lightweight exit, guest=host 3178 3193 3193 3187 3220
This passes the t-test with 99% confidence for userspace exit,
98.5% confidence for lightweight exit. - Paolo]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/x86/kvm/vmx.c')
-rw-r--r-- | arch/x86/kvm/vmx.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 0d25fc16d98b..330a08aa0291 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -1673,7 +1673,9 @@ static bool update_transition_efer(struct vcpu_vmx *vmx, int efer_offset) guest_efer = vmx->vcpu.arch.efer; if (!(guest_efer & EFER_LMA)) guest_efer &= ~EFER_LME; - add_atomic_switch_msr(vmx, MSR_EFER, guest_efer, host_efer); + if (guest_efer != host_efer) + add_atomic_switch_msr(vmx, MSR_EFER, + guest_efer, host_efer); return false; } |