• W
    arm64: tlbi: Set MAX_TLBI_OPS to PTRS_PER_PTE · c19a7104
    Will Deacon 提交于
    mainline inclusion
    from mainline-4.21
    commit: 3d65b6bbc01ecece8142e62a8a5f1d48ba41a240
    category: feature
    feature: Reduce synchronous TLB invalidation on ARM64
    bugzilla: NA
    CVE: NA
    
    --------------------------------------------------
    
    In order to reduce the possibility of soft lock-ups, we bound the
    maximum number of TLBI operations performed by a single call to
    flush_tlb_range() to an arbitrary constant of 1024.
    
    Whilst this does the job of avoiding lock-ups, we can actually be a bit
    smarter by defining this as PTRS_PER_PTE. Due to the structure of our
    page tables, using PTRS_PER_PTE means that an outer loop calling
    flush_tlb_range() for entire table entries will end up performing just a
    single TLBI operation for each entry. As an example, mremap()ing a 1GB
    range mapped using 4k pages now requires only 512 TLBI operations when
    moving the page tables as opposed to 262144 operations (512*512) when
    using the current threshold of 1024.
    
    Cc: Joel Fernandes <joel@joelfernandes.org>
    Acked-by: NCatalin Marinas <catalin.marinas@arm.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>
    c19a7104
tlbflush.h 7.5 KB