From: Linus Torvalds Date: Thu, 29 Apr 2021 18:41:43 +0000 (-0700) Subject: Merge tag 'x86-mm-2021-04-29' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip X-Git-Tag: accepted/tizen/unified/20230118.172025~7336 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=635de956a7f5a6ffcb04f29d70630c64c717b56b;p=platform%2Fkernel%2Flinux-rpi.git Merge tag 'x86-mm-2021-04-29' of git://git./linux/kernel/git/tip/tip 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() --- 635de956a7f5a6ffcb04f29d70630c64c717b56b diff --cc arch/x86/hyperv/mmu.c index c0ba887,681dba8..bd13736 --- a/arch/x86/hyperv/mmu.c +++ b/arch/x86/hyperv/mmu.c @@@ -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, diff --cc arch/x86/mm/tlb.c index 98f2695,f4b162f..7880468 --- a/arch/x86/mm/tlb.c +++ b/arch/x86/mm/tlb.c @@@ -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