• Chintan Pandya's avatar
    arm64: Implement page table free interfaces · ec28bb9c
    Chintan Pandya authored
    arm64 requires break-before-make. Originally, before
    setting up new pmd/pud entry for huge mapping, in few
    cases, the modifying pmd/pud entry was still valid
    and pointing to next level page table as we only
    clear off leaf PTE in unmap leg.
    
     a) This was resulting into stale entry in TLBs (as few
        TLBs also cache intermediate mapping for performance
        reasons)
     b) Also, modifying pmd/pud was the only reference to
        next level page table and it was getting lost without
        freeing it. So, page leaks were happening.
    
    Implement pud_free_pmd_page() and pmd_free_pte_page() to
    enforce BBM and also free the leaking page tables.
    
    Implementation requires,
     1) Clearing off the current pud/pmd entry
     2) Invalidation of TLB
     3) Freeing of the un-used next level page tables
    Reviewed-by: default avatarWill Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarChintan Pandya <cpandya@codeaurora.org>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    ec28bb9c
mmu.c 26.8 KB