• Will Deacon's avatar
    arm64: hugetlb: Restore TLB invalidation for BBM on contiguous ptes · 41098230
    Will Deacon authored
    Commit fb396bb4 ("arm64/hugetlb: Drop TLB flush from get_clear_flush()")
    removed TLB invalidation from get_clear_flush() [now get_clear_contig()]
    on the basis that the core TLB invalidation code is aware of hugetlb
    mappings backed by contiguous page-table entries and will cover the
    correct virtual address range.
    
    However, this change also resulted in the TLB invalidation being removed
    from the "break" step in the break-before-make (BBM) sequence used
    internally by huge_ptep_set_{access_flags,wrprotect}(), therefore
    making the BBM sequence unsafe irrespective of later invalidation.
    
    Although the architecture is desperately unclear about how exactly
    contiguous ptes should be updated in a live page-table, restore TLB
    invalidation to our BBM sequence under the assumption that BBM is the
    right thing to be doing in the first place.
    
    Fixes: fb396bb4 ("arm64/hugetlb: Drop TLB flush from get_clear_flush()")
    Cc: Ard Biesheuvel <ardb@kernel.org>
    Cc: Steve Capper <steve.capper@arm.com>
    Cc: Anshuman Khandual <anshuman.khandual@arm.com>
    Cc: Mike Kravetz <mike.kravetz@oracle.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Signed-off-by: default avatarWill Deacon <will@kernel.org>
    Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Reviewed-by: default avatarAnshuman Khandual <anshuman.khandual@arm.com>
    Link: https://lore.kernel.org/r/20220629095349.25748-1-will@kernel.orgSigned-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    41098230
hugetlbpage.c 12.6 KB