lkml.org 
[lkml]   [2008]   [Apr]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 20/35] KVM: Provide unlocked version of emulator_write_phys()
    Date
    Signed-off-by: Avi Kivity <avi@qumranet.com>
    ---
    arch/x86/kvm/x86.c | 21 ++++++++++++++-------
    include/asm-x86/kvm_host.h | 3 +++
    2 files changed, 17 insertions(+), 7 deletions(-)

    diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
    index 1b9e695..03ba402 100644
    --- a/arch/x86/kvm/x86.c
    +++ b/arch/x86/kvm/x86.c
    @@ -1840,22 +1840,29 @@ mmio:
    return X86EMUL_UNHANDLEABLE;
    }

    -static int emulator_write_phys(struct kvm_vcpu *vcpu, gpa_t gpa,
    - const void *val, int bytes)
    +int __emulator_write_phys(struct kvm_vcpu *vcpu, gpa_t gpa,
    + const void *val, int bytes)
    {
    int ret;

    - down_read(&vcpu->kvm->slots_lock);
    ret = kvm_write_guest(vcpu->kvm, gpa, val, bytes);
    - if (ret < 0) {
    - up_read(&vcpu->kvm->slots_lock);
    + if (ret < 0)
    return 0;
    - }
    kvm_mmu_pte_write(vcpu, gpa, val, bytes);
    - up_read(&vcpu->kvm->slots_lock);
    return 1;
    }

    +static int emulator_write_phys(struct kvm_vcpu *vcpu, gpa_t gpa,
    + const void *val, int bytes)
    +{
    + int ret;
    +
    + down_read(&vcpu->kvm->slots_lock);
    + ret =__emulator_write_phys(vcpu, gpa, val, bytes);
    + up_read(&vcpu->kvm->slots_lock);
    + return ret;
    +}
    +
    static int emulator_write_emulated_onepage(unsigned long addr,
    const void *val,
    unsigned int bytes,
    diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h
    index 12932bb..c8e51f8 100644
    --- a/include/asm-x86/kvm_host.h
    +++ b/include/asm-x86/kvm_host.h
    @@ -431,6 +431,9 @@ void kvm_mmu_change_mmu_pages(struct kvm *kvm, unsigned int kvm_nr_mmu_pages);

    int load_pdptrs(struct kvm_vcpu *vcpu, unsigned long cr3);

    +int __emulator_write_phys(struct kvm_vcpu *vcpu, gpa_t gpa,
    + const void *val, int bytes);
    +
    enum emulation_result {
    EMULATE_DONE, /* no further processing */
    EMULATE_DO_MMIO, /* kvm_run filled with mmio request */
    --
    1.5.4.5


    \
     
     \ /
      Last update: 2008-04-03 21:41    [W:0.025 / U:1.556 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site