lkml.org 
[lkml]   [2011]   [Jul]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 1/9] introduce kvm_read_guest_cached
    Date
    From: Gleb Natapov <gleb@redhat.com>

    Introduce kvm_read_guest_cached() function in addition to write one we
    already have.

    [ by glauber: export function signature in kvm header ]

    Signed-off-by: Gleb Natapov <gleb@redhat.com>
    Signed-off-by: Glauber Costa <glommer@redhat.com>
    ---
    include/linux/kvm_host.h | 2 ++
    virt/kvm/kvm_main.c | 20 ++++++++++++++++++++
    2 files changed, 22 insertions(+), 0 deletions(-)

    diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
    index 31ebb59..f7df0a3 100644
    --- a/include/linux/kvm_host.h
    +++ b/include/linux/kvm_host.h
    @@ -381,6 +381,8 @@ int kvm_read_guest_page(struct kvm *kvm, gfn_t gfn, void *data, int offset,
    int kvm_read_guest_atomic(struct kvm *kvm, gpa_t gpa, void *data,
    unsigned long len);
    int kvm_read_guest(struct kvm *kvm, gpa_t gpa, void *data, unsigned long len);
    +int kvm_read_guest_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc,
    + void *data, unsigned long len);
    int kvm_write_guest_page(struct kvm *kvm, gfn_t gfn, const void *data,
    int offset, int len);
    int kvm_write_guest(struct kvm *kvm, gpa_t gpa, const void *data,
    diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
    index 11d2783..d5ef9eb 100644
    --- a/virt/kvm/kvm_main.c
    +++ b/virt/kvm/kvm_main.c
    @@ -1418,6 +1418,26 @@ int kvm_write_guest_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc,
    }
    EXPORT_SYMBOL_GPL(kvm_write_guest_cached);

    +int kvm_read_guest_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc,
    + void *data, unsigned long len)
    +{
    + struct kvm_memslots *slots = kvm_memslots(kvm);
    + int r;
    +
    + if (slots->generation != ghc->generation)
    + kvm_gfn_to_hva_cache_init(kvm, ghc, ghc->gpa);
    +
    + if (kvm_is_error_hva(ghc->hva))
    + return -EFAULT;
    +
    + r = __copy_from_user(data, (void __user *)ghc->hva, len);
    + if (r)
    + return -EFAULT;
    +
    + return 0;
    +}
    +EXPORT_SYMBOL_GPL(kvm_read_guest_cached);
    +
    int kvm_clear_guest_page(struct kvm *kvm, gfn_t gfn, int offset, int len)
    {
    return kvm_write_guest_page(kvm, gfn, (const void *) empty_zero_page,
    --
    1.7.3.4


    \
     
     \ /
      Last update: 2011-07-01 23:33    [W:0.024 / U:1.132 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site