• Quentin Perret's avatar
    KVM: arm64: Introduce a Hyp buddy page allocator · 8e17c662
    Quentin Perret authored
    When memory protection is enabled, the hyp code will require a basic
    form of memory management in order to allocate and free memory pages at
    EL2. This is needed for various use-cases, including the creation of hyp
    mappings or the allocation of stage 2 page tables.
    
    To address these use-case, introduce a simple memory allocator in the
    hyp code. The allocator is designed as a conventional 'buddy allocator',
    working with a page granularity. It allows to allocate and free
    physically contiguous pages from memory 'pools', with a guaranteed order
    alignment in the PA space. Each page in a memory pool is associated
    with a struct hyp_page which holds the page's metadata, including its
    refcount, as well as its current order, hence mimicking the kernel's
    buddy system in the GFP infrastructure. The hyp_page metadata are made
    accessible through a hyp_vmemmap, following the concept of
    SPARSE_VMEMMAP in the kernel.
    Acked-by: default avatarWill Deacon <will@kernel.org>
    Signed-off-by: default avatarQuentin Perret <qperret@google.com>
    Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20210319100146.1149909-13-qperret@google.com
    8e17c662
page_alloc.c 4.86 KB