lkml.org 
[lkml]   [2010]   [Feb]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 38/38] KVM: Remove redundant reading of rax on OUT instructions
    Date
    From: Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>

    kvm_emulate_pio() and complete_pio() both read out the
    RAX register value and copy it to a place into which
    the value read out from the port will be copied later.

    This patch removes this redundancy.

    /*** snippet from arch/x86/kvm/x86.c ***/
    int complete_pio(struct kvm_vcpu *vcpu)
    {
    ...
    if (!io->string) {
    if (io->in) {
    val = kvm_register_read(vcpu, VCPU_REGS_RAX);
    memcpy(&val, vcpu->arch.pio_data, io->size);
    kvm_register_write(vcpu, VCPU_REGS_RAX, val);
    }
    ...

    Signed-off-by: Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
    Signed-off-by: Avi Kivity <avi@redhat.com>
    ---
    arch/x86/kvm/x86.c | 6 ++++--
    1 files changed, 4 insertions(+), 2 deletions(-)

    diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
    index c91007f..bd3161c 100644
    --- a/arch/x86/kvm/x86.c
    +++ b/arch/x86/kvm/x86.c
    @@ -3551,8 +3551,10 @@ int kvm_emulate_pio(struct kvm_vcpu *vcpu, int in, int size, unsigned port)
    trace_kvm_pio(vcpu->run->io.direction == KVM_EXIT_IO_OUT, port,
    size, 1);

    - val = kvm_register_read(vcpu, VCPU_REGS_RAX);
    - memcpy(vcpu->arch.pio_data, &val, 4);
    + if (!vcpu->arch.pio.in) {
    + val = kvm_register_read(vcpu, VCPU_REGS_RAX);
    + memcpy(vcpu->arch.pio_data, &val, 4);
    + }

    if (!kernel_pio(vcpu, vcpu->arch.pio_data)) {
    complete_pio(vcpu);
    --
    1.6.5.3


    \
     
     \ /
      Last update: 2010-02-16 11:41    [W:4.080 / U:0.176 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site