lkml.org 
[lkml]   [2012]   [Aug]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH v5 11/12] KVM: x86: introduce set_mmio_exit_info
    Introduce set_mmio_exit_info to cleanup the common code

    Signed-off-by: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
    ---
    arch/x86/kvm/x86.c | 33 +++++++++++++++++----------------
    1 files changed, 17 insertions(+), 16 deletions(-)

    diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
    index 4c86239..8cde327 100644
    --- a/arch/x86/kvm/x86.c
    +++ b/arch/x86/kvm/x86.c
    @@ -3761,9 +3761,6 @@ static int read_exit_mmio(struct kvm_vcpu *vcpu, gpa_t gpa,
    static int write_exit_mmio(struct kvm_vcpu *vcpu, gpa_t gpa,
    void *val, int bytes)
    {
    - struct kvm_mmio_fragment *frag = &vcpu->mmio_fragments[0];
    -
    - memcpy(vcpu->run->mmio.data, frag->data, frag->len);
    return X86EMUL_CONTINUE;
    }

    @@ -3831,6 +3828,20 @@ mmio:
    return X86EMUL_CONTINUE;
    }

    +static void set_mmio_exit_info(struct kvm_vcpu *vcpu,
    + struct kvm_mmio_fragment *frag, bool write)
    +{
    + struct kvm_run *run = vcpu->run;
    +
    + run->exit_reason = KVM_EXIT_MMIO;
    + run->mmio.phys_addr = frag->gpa;
    + run->mmio.len = frag->len;
    + run->mmio.is_write = vcpu->mmio_is_write = write;
    +
    + if (write)
    + memcpy(run->mmio.data, frag->data, frag->len);
    +}
    +
    int emulator_read_write(struct x86_emulate_ctxt *ctxt, unsigned long addr,
    void *val, unsigned int bytes,
    struct x86_exception *exception,
    @@ -3870,14 +3881,10 @@ int emulator_read_write(struct x86_emulate_ctxt *ctxt, unsigned long addr,
    return rc;

    gpa = vcpu->mmio_fragments[0].gpa;
    -
    vcpu->mmio_needed = 1;
    vcpu->mmio_cur_fragment = 0;

    - vcpu->run->mmio.len = vcpu->mmio_fragments[0].len;
    - vcpu->run->mmio.is_write = vcpu->mmio_is_write = ops->write;
    - vcpu->run->exit_reason = KVM_EXIT_MMIO;
    - vcpu->run->mmio.phys_addr = gpa;
    + set_mmio_exit_info(vcpu, &vcpu->mmio_fragments[0], ops->write);

    return ops->read_write_exit_mmio(vcpu, gpa, val, bytes);
    }
    @@ -5486,7 +5493,6 @@ static int __vcpu_run(struct kvm_vcpu *vcpu)
    */
    static int complete_mmio(struct kvm_vcpu *vcpu)
    {
    - struct kvm_run *run = vcpu->run;
    struct kvm_mmio_fragment *frag;
    int r;

    @@ -5497,7 +5503,7 @@ static int complete_mmio(struct kvm_vcpu *vcpu)
    /* Complete previous fragment */
    frag = &vcpu->mmio_fragments[vcpu->mmio_cur_fragment++];
    if (!vcpu->mmio_is_write)
    - memcpy(frag->data, run->mmio.data, frag->len);
    + memcpy(frag->data, vcpu->run->mmio.data, frag->len);
    if (vcpu->mmio_cur_fragment == vcpu->mmio_nr_fragments) {
    vcpu->mmio_needed = 0;
    if (vcpu->mmio_is_write)
    @@ -5507,12 +5513,7 @@ static int complete_mmio(struct kvm_vcpu *vcpu)
    }
    /* Initiate next fragment */
    ++frag;
    - run->exit_reason = KVM_EXIT_MMIO;
    - run->mmio.phys_addr = frag->gpa;
    - if (vcpu->mmio_is_write)
    - memcpy(run->mmio.data, frag->data, frag->len);
    - run->mmio.len = frag->len;
    - run->mmio.is_write = vcpu->mmio_is_write;
    + set_mmio_exit_info(vcpu, frag, vcpu->mmio_is_write);
    return 0;

    }
    --
    1.7.7.6


    \
     
     \ /
      Last update: 2012-08-07 12:41    [W:0.030 / U:152.688 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site