Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=2345df8c555ecb92c0c36172c07d5ac321a92dc7
Commit:     2345df8c555ecb92c0c36172c07d5ac321a92dc7
Parent:     c9047f533373e934b96d19d6a3d313ca2132fbe5
Author:     Avi Kivity <[EMAIL PROTECTED]>
AuthorDate: Tue Apr 17 15:30:24 2007 +0300
Committer:  Avi Kivity <[EMAIL PROTECTED]>
CommitDate: Thu May 3 10:52:29 2007 +0300

    KVM: VMX: Reduce unnecessary saving of host msrs
    
    THe automatically switched msrs are never changed on the host (with
    the exception of MSR_KERNEL_GS_BASE) and thus there is no need to save
    them on every vm entry.
    
    This reduces vmexit latency by ~400 cycles on i386 and by ~900 cycles (10%)
    on x86_64.
    
    Signed-off-by: Avi Kivity <[EMAIL PROTECTED]>
---
 drivers/kvm/vmx.c |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/drivers/kvm/vmx.c b/drivers/kvm/vmx.c
index 8c0115b..3745e6c 100644
--- a/drivers/kvm/vmx.c
+++ b/drivers/kvm/vmx.c
@@ -78,6 +78,10 @@ static const u32 vmx_msr_index[] = {
 };
 #define NR_VMX_MSR ARRAY_SIZE(vmx_msr_index)
 
+#ifdef CONFIG_X86_64
+static unsigned msr_offset_kernel_gs_base;
+#endif
+
 static inline int is_page_fault(u32 intr_info)
 {
        return (intr_info & (INTR_INFO_INTR_TYPE_MASK | INTR_INFO_VECTOR_MASK |
@@ -1129,6 +1133,10 @@ static int vmx_vcpu_setup(struct kvm_vcpu *vcpu)
                vcpu->host_msrs[j].reserved = 0;
                vcpu->host_msrs[j].data = data;
                vcpu->guest_msrs[j] = vcpu->host_msrs[j];
+#ifdef CONFIG_X86_64
+               if (index == MSR_KERNEL_GS_BASE)
+                       msr_offset_kernel_gs_base = j;
+#endif
                ++vcpu->nmsrs;
        }
 
@@ -1760,7 +1768,9 @@ again:
        fx_save(vcpu->host_fx_image);
        fx_restore(vcpu->guest_fx_image);
 
-       save_msrs(vcpu->host_msrs, vcpu->nmsrs);
+#ifdef CONFIG_X86_64
+       save_msrs(vcpu->host_msrs + msr_offset_kernel_gs_base, 1);
+#endif
        load_msrs(vcpu->guest_msrs, NR_BAD_MSRS);
 
        asm (
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to