Merge tag 'x86-mm-2021-04-29' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 29 Apr 2021 18:41:43 +0000 (11:41 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 29 Apr 2021 18:41:43 +0000 (11:41 -0700)
Pull x86 tlb updates from Ingo Molnar:
 "The x86 MM changes in this cycle were:

   - Implement concurrent TLB flushes, which overlaps the local TLB
     flush with the remote TLB flush.

     In testing this improved sysbench performance measurably by a
     couple of percentage points, especially if TLB-heavy security
     mitigations are active.

   - Further micro-optimizations to improve the performance of TLB
     flushes"

* tag 'x86-mm-2021-04-29' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  smp: Micro-optimize smp_call_function_many_cond()
  smp: Inline on_each_cpu_cond() and on_each_cpu()
  x86/mm/tlb: Remove unnecessary uses of the inline keyword
  cpumask: Mark functions as pure
  x86/mm/tlb: Do not make is_lazy dirty for no reason
  x86/mm/tlb: Privatize cpu_tlbstate
  x86/mm/tlb: Flush remote and local TLBs concurrently
  x86/mm/tlb: Open-code on_each_cpu_cond_mask() for tlb_is_not_lazy()
  x86/mm/tlb: Unify flush_tlb_func_local() and flush_tlb_func_remote()
  smp: Run functions concurrently in smp_call_function_many_cond()

1  2 
arch/x86/hyperv/mmu.c
arch/x86/include/asm/paravirt.h
arch/x86/include/asm/paravirt_types.h
arch/x86/kernel/alternative.c
arch/x86/kernel/kvm.c
arch/x86/kernel/paravirt.c
arch/x86/mm/init.c
arch/x86/mm/tlb.c
arch/x86/xen/mmu_pv.c
include/linux/cpumask.h

index c0ba8874d9cb833d4f25d5b0395e386e386270af,681dba8de4f2385c13735721eb5ef49b565c1a5e..bd13736d0c054b5055aa84eaedcb905b88468fb6
@@@ -58,10 -58,10 +58,10 @@@ static void hyperv_flush_tlb_multi(cons
        int cpu, vcpu, gva_n, max_gvas;
        struct hv_tlb_flush **flush_pcpu;
        struct hv_tlb_flush *flush;
 -      u64 status = U64_MAX;
 +      u64 status;
        unsigned long flags;
  
-       trace_hyperv_mmu_flush_tlb_others(cpus, info);
+       trace_hyperv_mmu_flush_tlb_multi(cpus, info);
  
        if (!hv_hypercall_pg)
                goto do_native;
@@@ -161,10 -161,10 +161,10 @@@ do_ex_hypercall
  check_status:
        local_irq_restore(flags);
  
 -      if (!(status & HV_HYPERCALL_RESULT_MASK))
 +      if (hv_result_success(status))
                return;
  do_native:
-       native_flush_tlb_others(cpus, info);
+       native_flush_tlb_multi(cpus, info);
  }
  
  static u64 hyperv_flush_tlb_others_ex(const struct cpumask *cpus,
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 98f269560d4060fb1f93ecfc968bccbe6a2574de,f4b162f273f52ca0ca6f404f6c30920886dab7fd..78804680e9231548ce8bfaf80bb51a970861afa8
@@@ -873,10 -907,10 +907,10 @@@ static struct flush_tlb_info *get_flush
        return info;
  }
  
- static inline void put_flush_tlb_info(void)
+ static void put_flush_tlb_info(void)
  {
  #ifdef CONFIG_DEBUG_VM
 -      /* Complete reentrency prevention checks */
 +      /* Complete reentrancy prevention checks */
        barrier();
        this_cpu_dec(flush_tlb_info_idx);
  #endif
Simple merge
Simple merge