lkml.org 
[lkml]   [2014]   [Jul]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 1/6] kvm: Add gfn_to_page_no_pin() to translate gfn to page without pinning.
    Date
    gfn_to_page() will finally call hva_to_pfn() to get the pfn, and pin the page
    in memory by calling GUP functions. This function unpins the page.

    Will be used by the followed patches.

    Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
    ---
    include/linux/kvm_host.h | 1 +
    virt/kvm/kvm_main.c | 17 ++++++++++++++++-
    2 files changed, 17 insertions(+), 1 deletion(-)

    diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
    index ec4e3bd..7c58d9d 100644
    --- a/include/linux/kvm_host.h
    +++ b/include/linux/kvm_host.h
    @@ -541,6 +541,7 @@ int gfn_to_page_many_atomic(struct kvm *kvm, gfn_t gfn, struct page **pages,
    int nr_pages);

    struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn);
    +struct page *gfn_to_page_no_pin(struct kvm *kvm, gfn_t gfn);
    unsigned long gfn_to_hva(struct kvm *kvm, gfn_t gfn);
    unsigned long gfn_to_hva_prot(struct kvm *kvm, gfn_t gfn, bool *writable);
    unsigned long gfn_to_hva_memslot(struct kvm_memory_slot *slot, gfn_t gfn);
    diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
    index 4b6c01b..6091849 100644
    --- a/virt/kvm/kvm_main.c
    +++ b/virt/kvm/kvm_main.c
    @@ -1371,9 +1371,24 @@ struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn)

    return kvm_pfn_to_page(pfn);
    }
    -
    EXPORT_SYMBOL_GPL(gfn_to_page);

    +struct page *gfn_to_page_no_pin(struct kvm *kvm, gfn_t gfn)
    +{
    + struct page *page = gfn_to_page(kvm, gfn);
    +
    + /*
    + * gfn_to_page() will finally call hva_to_pfn() to get the pfn, and pin
    + * the page in memory by calling GUP functions. This function unpins
    + * the page.
    + */
    + if (!is_error_page(page))
    + put_page(page);
    +
    + return page;
    +}
    +EXPORT_SYMBOL_GPL(gfn_to_page_no_pin);
    +
    void kvm_release_page_clean(struct page *page)
    {
    WARN_ON(is_error_page(page));
    --
    1.8.3.1


    \
     
     \ /
      Last update: 2014-07-23 12:21    [W:3.242 / U:0.704 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site