lkml.org 
[lkml]   [2021]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH v4 24/34] KVM: arm64: Make memcache anonymous in pgtable allocator
    From
    The current stage2 page-table allocator uses a memcache to get
    pre-allocated pages when it needs any. To allow re-using this code at
    EL2 which uses a concept of memory pools, make the memcache argument of
    kvm_pgtable_stage2_map() anonymous, and let the mm_ops zalloc_page()
    callbacks use it the way they need to.

    Acked-by: Will Deacon <will@kernel.org>
    Signed-off-by: Quentin Perret <qperret@google.com>
    ---
    arch/arm64/include/asm/kvm_pgtable.h | 6 +++---
    arch/arm64/kvm/hyp/pgtable.c | 4 ++--
    2 files changed, 5 insertions(+), 5 deletions(-)

    diff --git a/arch/arm64/include/asm/kvm_pgtable.h b/arch/arm64/include/asm/kvm_pgtable.h
    index 9cdc198ea6b4..4ae19247837b 100644
    --- a/arch/arm64/include/asm/kvm_pgtable.h
    +++ b/arch/arm64/include/asm/kvm_pgtable.h
    @@ -213,8 +213,8 @@ void kvm_pgtable_stage2_destroy(struct kvm_pgtable *pgt);
    * @size: Size of the mapping.
    * @phys: Physical address of the memory to map.
    * @prot: Permissions and attributes for the mapping.
    - * @mc: Cache of pre-allocated GFP_PGTABLE_USER memory from which to
    - * allocate page-table pages.
    + * @mc: Cache of pre-allocated and zeroed memory from which to allocate
    + * page-table pages.
    *
    * The offset of @addr within a page is ignored, @size is rounded-up to
    * the next page boundary and @phys is rounded-down to the previous page
    @@ -236,7 +236,7 @@ void kvm_pgtable_stage2_destroy(struct kvm_pgtable *pgt);
    */
    int kvm_pgtable_stage2_map(struct kvm_pgtable *pgt, u64 addr, u64 size,
    u64 phys, enum kvm_pgtable_prot prot,
    - struct kvm_mmu_memory_cache *mc);
    + void *mc);

    /**
    * kvm_pgtable_stage2_unmap() - Remove a mapping from a guest stage-2 page-table.
    diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c
    index 296675e5600d..bdd6e3d4eeb6 100644
    --- a/arch/arm64/kvm/hyp/pgtable.c
    +++ b/arch/arm64/kvm/hyp/pgtable.c
    @@ -445,7 +445,7 @@ struct stage2_map_data {
    kvm_pte_t *anchor;

    struct kvm_s2_mmu *mmu;
    - struct kvm_mmu_memory_cache *memcache;
    + void *memcache;

    struct kvm_pgtable_mm_ops *mm_ops;
    };
    @@ -669,7 +669,7 @@ static int stage2_map_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep,

    int kvm_pgtable_stage2_map(struct kvm_pgtable *pgt, u64 addr, u64 size,
    u64 phys, enum kvm_pgtable_prot prot,
    - struct kvm_mmu_memory_cache *mc)
    + void *mc)
    {
    int ret;
    struct stage2_map_data map_data = {
    --
    2.30.1.766.gb4fecdf3b7-goog
    \
     
     \ /
      Last update: 2021-03-10 19:09    [W:5.021 / U:0.108 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site