• Will Deacon's avatar
    ARM: tlb: don't perform inner-shareable invalidation for local TLB ops · f0915781
    Will Deacon authored
    Inner-shareable TLB invalidation is typically more expensive than local
    (non-shareable) invalidation, so performing the broadcasting for
    local_flush_tlb_* operations is a waste of cycles and needlessly
    clobbers entries in the TLBs of other CPUs.
    
    This patch introduces __flush_tlb_* versions for many of the TLB
    invalidation functions, which only respect inner-shareable variants of
    the invalidation instructions when presented with the TLB_V7_UIS_FULL
    flag. The local version is also inlined to prevent SMP_ON_UP kernels
    from missing flushes, where the __flush variant would be called with
    the UP flags.
    
    This gains us around 0.5% in hackbench scores for a dual-core A15, but I
    would expect this to improve as more cores (and clusters) are added to
    the equation.
    Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Reported-by: default avatarAlbin Tonnerre <Albin.Tonnerre@arm.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    f0915781
context.c 6.57 KB