• W
    asm-generic/tlb: Track which levels of the page tables have been cleared · aa951a96
    Will Deacon 提交于
    mainline inclusion
    from mainline-4.20-rc1
    commit: a6d60245
    category: feature
    feature: Reduce synchronous TLB invalidation on ARM64
    bugzilla: NA
    CVE: NA
    
    --------------------------------------------------
    
    It is common for architectures with hugepage support to require only a
    single TLB invalidation operation per hugepage during unmap(), rather than
    iterating through the mapping at a PAGE_SIZE increment. Currently,
    however, the level in the page table where the unmap() operation occurs
    is not stored in the mmu_gather structure, therefore forcing
    architectures to issue additional TLB invalidation operations or to give
    up and over-invalidate by e.g. invalidating the entire TLB.
    
    Ideally, we could add an interval rbtree to the mmu_gather structure,
    which would allow us to associate the correct mapping granule with the
    various sub-mappings within the range being invalidated. However, this
    is costly in terms of book-keeping and memory management, so instead we
    approximate by keeping track of the page table levels that are cleared
    and provide a means to query the smallest granule required for invalidation.
    Acked-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: NNicholas Piggin <npiggin@gmail.com>
    Signed-off-by: NWill Deacon <will.deacon@arm.com>
    Signed-off-by: NHanjun Guo <guohanjun@huawei.com>
    Reviewed-by: NXuefeng Wang <wxf.wang@hisilicon.com>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    aa951a96
tlb.h 10.7 KB