• Quentin Perret's avatar
    KVM: arm64: Use page-table to track page ownership · 807923e0
    Quentin Perret authored
    As the host stage 2 will be identity mapped, all the .hyp memory regions
    and/or memory pages donated to protected guestis will have to marked
    invalid in the host stage 2 page-table. At the same time, the hypervisor
    will need a way to track the ownership of each physical page to ensure
    memory sharing or donation between entities (host, guests, hypervisor) is
    legal.
    
    In order to enable this tracking at EL2, let's use the host stage 2
    page-table itself. The idea is to use the top bits of invalid mappings
    to store the unique identifier of the page owner. The page-table owner
    (the host) gets identifier 0 such that, at boot time, it owns the entire
    IPA space as the pgd starts zeroed.
    
    Provide kvm_pgtable_stage2_set_owner() which allows to modify the
    ownership of pages in the host stage 2. It re-uses most of the map()
    logic, but ends up creating invalid mappings instead. This impacts
    how we do refcount as we now need to count invalid mappings when they
    are used for ownership tracking.
    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-30-qperret@google.com
    807923e0
kvm_pgtable.h 14.9 KB