• Nadav Amit's avatar
    x86/mm/tlb: Flush remote and local TLBs concurrently · 4ce94eab
    Nadav Amit authored
    To improve TLB shootdown performance, flush the remote and local TLBs
    concurrently. Introduce flush_tlb_multi() that does so. Introduce
    paravirtual versions of flush_tlb_multi() for KVM, Xen and hyper-v (Xen
    and hyper-v are only compile-tested).
    
    While the updated smp infrastructure is capable of running a function on
    a single local core, it is not optimized for this case. The multiple
    function calls and the indirect branch introduce some overhead, and
    might make local TLB flushes slower than they were before the recent
    changes.
    
    Before calling the SMP infrastructure, check if only a local TLB flush
    is needed to restore the lost performance in this common case. This
    requires to check mm_cpumask() one more time, but unless this mask is
    updated very frequently, this should impact performance negatively.
    Signed-off-by: default avatarNadav Amit <namit@vmware.com>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Reviewed-by: Michael Kelley <mikelley@microsoft.com> # Hyper-v parts
    Reviewed-by: Juergen Gross <jgross@suse.com> # Xen and paravirt parts
    Reviewed-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Link: https://lore.kernel.org/r/20210220231712.2475218-5-namit@vmware.com
    4ce94eab
mmu_pv.c 63 KB