Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp3631537ybi; Mon, 27 May 2019 03:23:32 -0700 (PDT) X-Google-Smtp-Source: APXvYqx9K9m9KvcHxXAkUB56EAPfQRsFt6OAaFsKVRI00Hq0XIksDsqqbfVeHfd0eNAayaRbx2qr X-Received: by 2002:a65:530d:: with SMTP id m13mr30634716pgq.68.1558952612374; Mon, 27 May 2019 03:23:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558952612; cv=none; d=google.com; s=arc-20160816; b=jsWMM3RsbV56gsMwr0K+DiU+cy9v4ME/+h/O5T/nNbz9irk4fG2AxnnhbSO4azaPTu ZISdxP+DpzF/YmgZGesBnooMNhxcXakwRE8J0LVba0TXJhxru5SkZ61s2++rk+NVsdOM TbhUOV+d9AZJZsElfSF6xC9iT9B6h0YiDaIu3QUAS6c5XRP0eDIdBd227E1Ht0nQwlXm 02paiDbc8g69lqzeSFn+rOPooBzetjC4gnH6IUUq09bKp6/ntsa+6KHTHEtpowk9Xjtf a1B1Eb4PeA3g7oLoN3dSSMCCXZi52TJbwDYTaZXdABtEWs8R6yWLrlxrNVb5uTP6l7xA YB0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=b21qaBk7xgBLkh/tR0jiPGLO6jWcDKAw7epKgIMYkgI=; b=0EJiz+TMMZ8zOvwInVcGxOJhrRzuDm7dmXDDfBnjmjVzuG11eYOVOH8eRXhWAj/Q5Y C4EKgziKnw3ZCg5sfw428nPjzGndO57XSjHlQY/LOCqkvnrre10QnOO9/N/E+N64ODBT sMD+EjgmwQSk4HoHjIRldP8wpvFJsScNEP8tn8/cyey4RQGL15NG0Szg0fUwFtfE5+KA nK8KVDh3TwPTeEnRxwQvq/PhYarkTk9uXzvvjTKGo1UcGrUm3fRhTXatcJS8SjP5YVmn 7bSvkcD6BNXShOR3ZnCmLHFS6Mzs3sGFQP/Kahy8gvuyGIj2E7kE2m0IqP171u5bI9EU gTSQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d19si18271079pfr.70.2019.05.27.03.23.17; Mon, 27 May 2019 03:23:32 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726792AbfE0KWD (ORCPT + 99 others); Mon, 27 May 2019 06:22:03 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:39825 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725858AbfE0KWC (ORCPT ); Mon, 27 May 2019 06:22:02 -0400 Received: by mail-wr1-f66.google.com with SMTP id e2so7610963wrv.6 for ; Mon, 27 May 2019 03:22:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=b21qaBk7xgBLkh/tR0jiPGLO6jWcDKAw7epKgIMYkgI=; b=gmNM+F46bBFRK67zBu1mFuHNdpxCSJHIQMxoudNsqtcoP3/m4EfosM2dTkFdM7+5Ut apIiv5sM9yZWFPHnOiDfQYpSN+xva4MC6QToPeOiy5KANx95zna9gxUMnDukmeeXhaMi MR2Zw4o79SqVsWB7KMea0aeZym4zCsIuBXM/84OF7hDf9eRYL8zhIQml0FERrhIvpk9K RkkRa3HlBuFeunISCfLB0gQfMr/kf8T6cB2TKjHmGx6nz44DaEeTI0ZgPYg1nRPh1yMO 53MKZzoiW/KHryqph1HP6aNxI5KTZifVzGeT9H2pbJecwCfUkmZsp4hPTfX8H2nQtjNO Batw== X-Gm-Message-State: APjAAAVxeYPaMj2d0wdS2Toa3oyT7pwaHlxqKGjbX62yw6Dx+lhYuZEy NQNLHWN3r/m5srUiJrxZ34sr4Q== X-Received: by 2002:adf:db87:: with SMTP id u7mr25167674wri.245.1558952521069; Mon, 27 May 2019 03:22:01 -0700 (PDT) Received: from ?IPv6:2001:b07:6468:f312:c43e:46a8:e962:cee8? ([2001:b07:6468:f312:c43e:46a8:e962:cee8]) by smtp.gmail.com with ESMTPSA id a17sm8328827wrr.80.2019.05.27.03.21.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 27 May 2019 03:22:00 -0700 (PDT) Subject: Re: [RFC PATCH 5/6] x86/mm/tlb: Flush remote and local TLBs concurrently To: Peter Zijlstra , Juergen Gross Cc: Nadav Amit , Ingo Molnar , Andy Lutomirski , Borislav Petkov , linux-kernel@vger.kernel.org, "K. Y. Srinivasan" , Haiyang Zhang , Stephen Hemminger , Sasha Levin , Thomas Gleixner , x86@kernel.org, Dave Hansen , Boris Ostrovsky , linux-hyperv@vger.kernel.org, virtualization@lists.linux-foundation.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org References: <20190525082203.6531-1-namit@vmware.com> <20190525082203.6531-6-namit@vmware.com> <08b21fb5-2226-7924-30e3-31e4adcfc0a3@suse.com> <20190527094710.GU2623@hirez.programming.kicks-ass.net> From: Paolo Bonzini Message-ID: Date: Mon, 27 May 2019 12:21:59 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <20190527094710.GU2623@hirez.programming.kicks-ass.net> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 27/05/19 11:47, Peter Zijlstra wrote: > On Sat, May 25, 2019 at 10:54:50AM +0200, Juergen Gross wrote: >> On 25/05/2019 10:22, Nadav Amit wrote: > >>> diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h >>> index 946f8f1f1efc..3a156e63c57d 100644 >>> --- a/arch/x86/include/asm/paravirt_types.h >>> +++ b/arch/x86/include/asm/paravirt_types.h >>> @@ -211,6 +211,12 @@ struct pv_mmu_ops { >>> void (*flush_tlb_user)(void); >>> void (*flush_tlb_kernel)(void); >>> void (*flush_tlb_one_user)(unsigned long addr); >>> + /* >>> + * flush_tlb_multi() is the preferred interface. When it is used, >>> + * flush_tlb_others() should return false. >> >> This comment does not make sense. flush_tlb_others() return type is >> void. > > I suspect that is an artifact from before the static_key; an attempt to > make the pv interface less awkward. > > Something like the below would work for KVM I suspect, the others > (Hyper-V and Xen are more 'interesting'). > > --- > --- a/arch/x86/kernel/kvm.c > +++ b/arch/x86/kernel/kvm.c > @@ -580,7 +580,7 @@ static void __init kvm_apf_trap_init(voi > > static DEFINE_PER_CPU(cpumask_var_t, __pv_tlb_mask); > > -static void kvm_flush_tlb_others(const struct cpumask *cpumask, > +static void kvm_flush_tlb_multi(const struct cpumask *cpumask, > const struct flush_tlb_info *info) > { > u8 state; > @@ -594,6 +594,9 @@ static void kvm_flush_tlb_others(const s > * queue flush_on_enter for pre-empted vCPUs > */ > for_each_cpu(cpu, flushmask) { > + if (cpu == smp_processor_id()) > + continue; > + Even this would be just an optimization; the vCPU you're running on cannot be preempted. You can just change others to multi. Paolo > src = &per_cpu(steal_time, cpu); > state = READ_ONCE(src->preempted); > if ((state & KVM_VCPU_PREEMPTED)) { > @@ -603,7 +606,7 @@ static void kvm_flush_tlb_others(const s > } > } > > - native_flush_tlb_others(flushmask, info); > + native_flush_tlb_multi(flushmask, info); > } > > static void __init kvm_guest_init(void) > @@ -628,9 +631,8 @@ static void __init kvm_guest_init(void) > if (kvm_para_has_feature(KVM_FEATURE_PV_TLB_FLUSH) && > !kvm_para_has_hint(KVM_HINTS_REALTIME) && > kvm_para_has_feature(KVM_FEATURE_STEAL_TIME)) { > - pv_ops.mmu.flush_tlb_others = kvm_flush_tlb_others; > + pv_ops.mmu.flush_tlb_multi = kvm_flush_tlb_multi; > pv_ops.mmu.tlb_remove_table = tlb_remove_table; > - static_key_disable(&flush_tlb_multi_enabled.key); > } > > if (kvm_para_has_feature(KVM_FEATURE_PV_EOI)) >