lkml.org 
[lkml]   [2021]   [Jan]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[RFC PATCH v2 05/26] KVM: arm64: Avoid free_page() in page-table allocator
    From
    Currently, the KVM page-table allocator uses a mix of put_page() and
    free_page() calls depending on the context even though page-allocation
    is always achieved using variants of __get_free_page().

    Make the code consitent by using put_page() throughout, and reduce the
    memory management API surface used by the page-table code. This will
    ease factoring out page-alloction from pgtable.c, which is a
    pre-requisite to creating page-tables at EL2.

    Signed-off-by: Quentin Perret <qperret@google.com>
    ---
    arch/arm64/kvm/hyp/pgtable.c | 10 +++++-----
    1 file changed, 5 insertions(+), 5 deletions(-)

    diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c
    index 0271b4a3b9fe..d7122c5eac24 100644
    --- a/arch/arm64/kvm/hyp/pgtable.c
    +++ b/arch/arm64/kvm/hyp/pgtable.c
    @@ -410,7 +410,7 @@ int kvm_pgtable_hyp_init(struct kvm_pgtable *pgt, u32 va_bits)
    static int hyp_free_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep,
    enum kvm_pgtable_walk_flags flag, void * const arg)
    {
    - free_page((unsigned long)kvm_pte_follow(*ptep));
    + put_page(virt_to_page(kvm_pte_follow(*ptep)));
    return 0;
    }

    @@ -422,7 +422,7 @@ void kvm_pgtable_hyp_destroy(struct kvm_pgtable *pgt)
    };

    WARN_ON(kvm_pgtable_walk(pgt, 0, BIT(pgt->ia_bits), &walker));
    - free_page((unsigned long)pgt->pgd);
    + put_page(virt_to_page(pgt->pgd));
    pgt->pgd = NULL;
    }

    @@ -551,7 +551,7 @@ static int stage2_map_walk_table_post(u64 addr, u64 end, u32 level,
    if (!data->anchor)
    return 0;

    - free_page((unsigned long)kvm_pte_follow(*ptep));
    + put_page(virt_to_page(kvm_pte_follow(*ptep)));
    put_page(virt_to_page(ptep));

    if (data->anchor == ptep) {
    @@ -674,7 +674,7 @@ static int stage2_unmap_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep,
    }

    if (childp)
    - free_page((unsigned long)childp);
    + put_page(virt_to_page(childp));

    return 0;
    }
    @@ -871,7 +871,7 @@ static int stage2_free_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep,
    put_page(virt_to_page(ptep));

    if (kvm_pte_table(pte, level))
    - free_page((unsigned long)kvm_pte_follow(pte));
    + put_page(virt_to_page(kvm_pte_follow(pte)));

    return 0;
    }
    --
    2.30.0.284.gd98b1dd5eaa7-goog
    \
     
     \ /
      Last update: 2021-01-08 13:19    [W:3.705 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site