lkml.org 
[lkml]   [2021]   [Jun]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 4/9] KVM: X86: Introduce pte_list_count() helper
    Date
    This helper is used to count the number of rmap entries in the rmap list
    pointed by the kvm_rmap_head.

    Signed-off-by: Peter Xu <peterx@redhat.com>
    ---
    arch/x86/kvm/mmu/mmu.c | 21 +++++++++++++++++++++
    arch/x86/kvm/mmu/mmu_internal.h | 1 +
    2 files changed, 22 insertions(+)

    diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c
    index eb16c1dbbb32..b3f738a7c05e 100644
    --- a/arch/x86/kvm/mmu/mmu.c
    +++ b/arch/x86/kvm/mmu/mmu.c
    @@ -990,6 +990,27 @@ static void pte_list_remove(struct kvm_rmap_head *rmap_head, u64 *sptep)
    __pte_list_remove(sptep, rmap_head);
    }

    +unsigned int pte_list_count(struct kvm_rmap_head *rmap_head)
    +{
    + struct pte_list_desc *desc;
    + unsigned int i, count = 0;
    +
    + if (!rmap_head->val)
    + return 0;
    + else if (!(rmap_head->val & 1))
    + return 1;
    +
    + desc = (struct pte_list_desc *)(rmap_head->val & ~1ul);
    +
    + while (desc) {
    + for (i = 0; (i < PTE_LIST_EXT) && desc->sptes[i]; i++)
    + count++;
    + desc = desc->more;
    + }
    +
    + return count;
    +}
    +
    static struct kvm_rmap_head *__gfn_to_rmap(gfn_t gfn, int level,
    struct kvm_memory_slot *slot)
    {
    diff --git a/arch/x86/kvm/mmu/mmu_internal.h b/arch/x86/kvm/mmu/mmu_internal.h
    index 35567293c1fd..325b4242deed 100644
    --- a/arch/x86/kvm/mmu/mmu_internal.h
    +++ b/arch/x86/kvm/mmu/mmu_internal.h
    @@ -131,6 +131,7 @@ bool kvm_mmu_slot_gfn_write_protect(struct kvm *kvm,
    int min_level);
    void kvm_flush_remote_tlbs_with_address(struct kvm *kvm,
    u64 start_gfn, u64 pages);
    +unsigned int pte_list_count(struct kvm_rmap_head *rmap_head);

    /*
    * Return values of handle_mmio_page_fault, mmu.page_fault, and fast_page_fault().
    --
    2.31.1
    \
     
     \ /
      Last update: 2021-06-25 17:32    [W:4.203 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site