• Quentin Perret's avatar
    KVM: arm64: Move hyp_pool locking out of refcount helpers · 6cbf874e
    Quentin Perret authored
    The hyp_page refcount helpers currently rely on the hyp_pool lock for
    serialization. However, this means the refcounts can't be changed from
    the buddy allocator core as it already holds the lock, which means pages
    have to go through odd transient states.
    
    For example, when a page is freed, its refcount is set to 0, and the
    lock is transiently released before the page can be attached to a free
    list in the buddy tree. This is currently harmless as the allocator
    checks the list node of each page to see if it is available for
    allocation or not, but it means the page refcount can't be trusted to
    represent the state of the page even if the pool lock is held.
    
    In order to fix this, remove the pool locking from the refcount helpers,
    and move all the logic to the buddy allocator. This will simplify the
    removal of the list node from struct hyp_page in a later patch.
    Signed-off-by: default avatarQuentin Perret <qperret@google.com>
    Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20210608114518.748712-2-qperret@google.com
    6cbf874e
page_alloc.c 5.56 KB