KVM: SVM: Move guest register save out of interrupts disabled section
authorAvi Kivity <avi@redhat.com>
Thu, 21 Oct 2010 10:20:31 +0000 (12:20 +0200)
committerAvi Kivity <avi@redhat.com>
Wed, 12 Jan 2011 09:23:29 +0000 (11:23 +0200)
Saving guest registers is just a memory copy, and does not need to be in the
critical section.  Move outside the critical section to improve latency a
bit.

Signed-off-by: Avi Kivity <avi@redhat.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
arch/x86/kvm/svm.c

index 93e8120b80214d4cc2089daa859bce985bb41f02..80354965f7fd9cba61de2403f41a36684bc1f9e3 100644 (file)
@@ -3412,11 +3412,6 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu)
 #endif
                );
 
-       vcpu->arch.cr2 = svm->vmcb->save.cr2;
-       vcpu->arch.regs[VCPU_REGS_RAX] = svm->vmcb->save.rax;
-       vcpu->arch.regs[VCPU_REGS_RSP] = svm->vmcb->save.rsp;
-       vcpu->arch.regs[VCPU_REGS_RIP] = svm->vmcb->save.rip;
-
        load_host_msrs(vcpu);
        kvm_load_ldt(ldt_selector);
        loadsegment(fs, fs_selector);
@@ -3433,6 +3428,11 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu)
 
        stgi();
 
+       vcpu->arch.cr2 = svm->vmcb->save.cr2;
+       vcpu->arch.regs[VCPU_REGS_RAX] = svm->vmcb->save.rax;
+       vcpu->arch.regs[VCPU_REGS_RSP] = svm->vmcb->save.rsp;
+       vcpu->arch.regs[VCPU_REGS_RIP] = svm->vmcb->save.rip;
+
        sync_cr8_to_lapic(vcpu);
 
        svm->next_rip = 0;