lkml.org 
[lkml]   [2009]   [Aug]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 18/47] KVM: VMX: Only reload guest cr2 if different from host cr2
    Date
    cr2 changes only rarely, and writing it is expensive.  Avoid the costly cr2
    writes by checking if it does not already hold the desired value.

    Shaves 70 cycles off the vmexit latency.

    Signed-off-by: Avi Kivity <avi@redhat.com>
    ---
    arch/x86/kvm/vmx.c | 9 +++++++--
    1 files changed, 7 insertions(+), 2 deletions(-)

    diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
    index fc8d49c..1a84ca1 100644
    --- a/arch/x86/kvm/vmx.c
    +++ b/arch/x86/kvm/vmx.c
    @@ -3651,11 +3651,16 @@ static void vmx_vcpu_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
    "mov %%"R"sp, %c[host_rsp](%0) \n\t"
    __ex(ASM_VMX_VMWRITE_RSP_RDX) "\n\t"
    "1: \n\t"
    + /* Reload cr2 if changed */
    + "mov %c[cr2](%0), %%"R"ax \n\t"
    + "mov %%cr2, %%"R"dx \n\t"
    + "cmp %%"R"ax, %%"R"dx \n\t"
    + "je 2f \n\t"
    + "mov %%"R"ax, %%cr2 \n\t"
    + "2: \n\t"
    /* Check if vmlaunch of vmresume is needed */
    "cmpl $0, %c[launched](%0) \n\t"
    /* Load guest registers. Don't clobber flags. */
    - "mov %c[cr2](%0), %%"R"ax \n\t"
    - "mov %%"R"ax, %%cr2 \n\t"
    "mov %c[rax](%0), %%"R"ax \n\t"
    "mov %c[rbx](%0), %%"R"bx \n\t"
    "mov %c[rdx](%0), %%"R"dx \n\t"
    --
    1.6.3.3


    \
     
     \ /
      Last update: 2009-08-19 15:27    [W:0.021 / U:121.820 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site