Received: by 2002:a05:7412:6592:b0:d7:7d3a:4fe2 with SMTP id m18csp725066rdg; Thu, 10 Aug 2023 18:45:02 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFzLix7zaNoZPOiwbGa+1hbhIPczNo178f3UIP8VMhs/ONj5x9TLuaCj92tjVii7+Bb8sZ9 X-Received: by 2002:a05:6808:ecb:b0:3a7:626a:100d with SMTP id q11-20020a0568080ecb00b003a7626a100dmr635117oiv.16.1691718302584; Thu, 10 Aug 2023 18:45:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691718302; cv=none; d=google.com; s=arc-20160816; b=ufHcMXLwsaP289P8JxbvBJnylDo5waui9rb+mqsgoTzF5cBge/0+BiElTmKE0eLdBK ICN7TudY8MVbbhI8HPd1NFu5l8xs9X4dtmn7M/RtNTWT7gCjYZqem86LUPGOaUzGOxLi r44wIDc5CNV18/cCyagp4NctD6zwX/EMqqP6DfvBlLlTMm2XGfWjA+3YjIhuY7HDT48F ttn84+OZtO6aCVqB+Vgawdd6OLU8eILZOJrArY8KVuJc8WpznQo+2t5PVEVhB6qZBsGE HONLJQLKIEExbfY1uY2D99si8NOFR3f6OZgVanbAVT4oHBZ8pe1ZtzJpKOvUXIJn0iD/ M7eg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:from:subject :message-id:references:mime-version:in-reply-to:date:dkim-signature; bh=A2HZ014dOId2hDwWOJ0bOX1N/o8JyjLLT0vxMFHcIcY=; fh=NXSj6GOghcZpYomZIfQlTkAjl8IVzTJ+v9/gtrdHxDI=; b=nYnBWoTQjhl4itTaMZk+tTSNHAqPHS3USZD+q/kZSBzHaHQ6EW1xpaVh+24kuapD7M 0oagbsEjQcQxdpdle8+lzwMMbX2wgGS9teWnSG1w94Q3YFX2DY9iWonJDY6ZDjJD0jEr va35TfXU4B/y2+pIu+tx5mBMwIBL4PQogbNjtUcLIduxY9/Qi8AU78+dMMf8LsKnlkBb lm6ZUjCII4p1Yvrl0QpsGQRtqXmElHXmOGnwnzR4PwCvaLcdxdV6P3CffHYZY26SpQ+n 7PprWKPIXt1Fi/Dwgpi1Gmwcajub9lnLSu7XBVnyZgwGUox4zbVltS/qWGPvCzL9ak6w 8w3g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=0MC+1qS5; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k3-20020a633d03000000b005649974da2csi2669735pga.259.2023.08.10.18.44.48; Thu, 10 Aug 2023 18:45:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=0MC+1qS5; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232757AbjHJXEl (ORCPT + 99 others); Thu, 10 Aug 2023 19:04:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49486 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232507AbjHJXEk (ORCPT ); Thu, 10 Aug 2023 19:04:40 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 37AD3272D for ; Thu, 10 Aug 2023 16:04:39 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id 41be03b00d2f7-5655a2c868eso1186448a12.2 for ; Thu, 10 Aug 2023 16:04:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1691708678; x=1692313478; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=A2HZ014dOId2hDwWOJ0bOX1N/o8JyjLLT0vxMFHcIcY=; b=0MC+1qS5aT0RvDrX5IaHMaXhXaErKLPRBrB/Qhb9rgmY/6FUVskutRGKLGqj7dY8hZ QRIRnikH8YFjNgr26no9dHROZf3p60slPbecWPaWe27AiUFJ/WfBafaaXTbrUs3CVUqu hhLtZXslkxOrFt2TQSZEudUex+ICR4f926CQFKIQGIAZBOvLfcMDtMJtl8z9MxExyF3m HSUPnDnmO71AFEjYA9qJQWTjeQSK/GOn7SK1H5NcSqwjW6Q/phOxevKNgs7Q+RASqjqg bTDAPkdoWEjWPz8yPMRjP0Nlq0K15tkZPNotUJ4eWFH3He4oVgHfl1pkxkzx7sTODcyz lDyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691708678; x=1692313478; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=A2HZ014dOId2hDwWOJ0bOX1N/o8JyjLLT0vxMFHcIcY=; b=CH2yDSNIV4iirFM55I/mPX1eMiVbl9CSI1srJ8/PbNK4qTrFtt6P7NVaDYSVcnh/Cb OLIl8lgPC0p3YmqHlcIjDWeaLaW17MvJD7NoNAglQ8walyRJxaviXoFRPDHuD0/4RSsh dq/q/GO/J8Fa8ASqfMF2R4QUP+X3iZHSExNKHgSOoanH4znnnzSWU/6dDxmQL+hlrqSg hGlDRDpdka7d/YTGWD2UFDj+uaV7wu07mkwQv8PeXLuoNF3c6kO8Dlot6VRTnKLLK9hg 66FYohALa6Zfr8cmQV0BUa/etHLYU05i9W4BYD4kOiwk36xE7S+e9n6iF35JPbTbXzpp 2CEw== X-Gm-Message-State: AOJu0YxROtEkef1im68Aoboy0bKYvmcv8GjWQGhzc7GGYAhJKk08EVhl Toz9APtzQs4lOrb1LVQ7Z7GWElp6PDQ= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a63:7e10:0:b0:563:e825:7f3a with SMTP id z16-20020a637e10000000b00563e8257f3amr14811pgc.11.1691708678622; Thu, 10 Aug 2023 16:04:38 -0700 (PDT) Date: Thu, 10 Aug 2023 16:04:37 -0700 In-Reply-To: Mime-Version: 1.0 References: <20230808231330.3855936-1-rananta@google.com> <20230808231330.3855936-3-rananta@google.com> <30e45ef3-309a-63de-e085-be1645c1be79@redhat.com> Message-ID: Subject: Re: [PATCH v8 02/14] KVM: Declare kvm_arch_flush_remote_tlbs() globally From: Sean Christopherson To: Raghavendra Rao Ananta Cc: Shaoqin Huang , Gavin Shan , Oliver Upton , Marc Zyngier , James Morse , Suzuki K Poulose , Paolo Bonzini , Huacai Chen , Zenghui Yu , Anup Patel , Atish Patra , Jing Zhang , Reiji Watanabe , Colton Lewis , David Matlack , Fuad Tabba , linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-mips@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Aug 10, 2023, Raghavendra Rao Ananta wrote: > On Thu, Aug 10, 2023 at 3:20=E2=80=AFPM Sean Christopherson wrote: > > On Thu, Aug 10, 2023, Raghavendra Rao Ananta wrote: > > > After doing some experiments, I think it works because of the order i= n > > > which the inline-definition and the declaration are laid out. If the > > > 'inline' part of the function comes first and then the declaration, w= e > > > don't see any error. However if the positions were reversed, we would > > > see an error. (I'm not sure what the technical reason for this is). > > > > > > Just to be safe, I can move the definition to arch/x86/kvm/mmu/mmu.c > > > as a non-inline function. > > > > No need, asm/kvm_host.h _must_ be included before the declaration, othe= rwise the > > declaration wouldn't be made because __KVM_HAVE_ARCH_FLUSH_REMOTE_TLBS = wouldn't > > be defined. I.e. we won't run into issues where the non-static declara= tion comes > > before the static inline definition. > > > > C99 explicitly covers this case: > > > > 6.2.2 Linkages of identifiers > > > > ... > > > > If the declaration of a file scope identifier for an object or a func= tion contains the storage- > > class specifier static, the identifier has internal linkage. > > > > For an identifier declared with the storage-class specifier extern in= a scope in which a > > prior declaration of that identifier is visible if the prior declarat= ion specifies internal or > > external linkage, the linkage of the identifier at the later declarat= ion is the same as the > > linkage specified at the prior declaration. If no prior declaration i= s visible, or if the prior > > declaration specifies no linkage, then the identifier has external li= nkage. > > > > In short, because the "static inline" declared internal linkage first, = it wins. > Thanks for sharing this! I can keep the 'static inline' definition as > is then. However, since a later patch (patch-05/14) defines > kvm_arch_flush_remote_tlbs_range() in arch/x86/kvm/mmu/mmu.c, do you > think we can move this definition to the .c file as well for > consistency? We "can", but I don't see any reason to do so. Trying to make helpers cons= istently inline or not is usually a fools errand. And in this case, I'd actually ra= ther go the opposite direction and make the range variant an inline. Ha! And I can justify that with minimal effort. The below makes the helpe= r a straight passthrough for CONFIG_HYPERV=3Dn builds, at which point I think i= t makes sense for it to be inline. If it won't slow your series down even more, any objection to sliding the b= elow patch in somewhere before patch 5? And then add a patch to inline the rang= e-based helper? Disclaimer: compile tested only. --- From: Sean Christopherson Date: Thu, 10 Aug 2023 15:58:53 -0700 Subject: [PATCH] KVM: x86/mmu: Declare flush_remote_tlbs{_range}() hooks if= f HYPERV!=3Dn Declare the kvm_x86_ops hooks used to wire up paravirt TLB flushes when running under Hyper-V if and only if CONFIG_HYPERV!=3Dn. Wrapping yet more code with IS_ENABLED(CONFIG_HYPERV) eliminates a handful of conditional branches, and makes it super obvious why the hooks *might* be valid. Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm-x86-ops.h | 2 ++ arch/x86/include/asm/kvm_host.h | 4 ++++ arch/x86/kvm/mmu/mmu.c | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/arch/x86/include/asm/kvm-x86-ops.h b/arch/x86/include/asm/kvm-= x86-ops.h index 13bc212cd4bc..6bc1ab0627b7 100644 --- a/arch/x86/include/asm/kvm-x86-ops.h +++ b/arch/x86/include/asm/kvm-x86-ops.h @@ -54,8 +54,10 @@ KVM_X86_OP(set_rflags) KVM_X86_OP(get_if_flag) KVM_X86_OP(flush_tlb_all) KVM_X86_OP(flush_tlb_current) +#if IS_ENABLED(CONFIG_HYPERV) KVM_X86_OP_OPTIONAL(flush_remote_tlbs) KVM_X86_OP_OPTIONAL(flush_remote_tlbs_range) +#endif KVM_X86_OP(flush_tlb_gva) KVM_X86_OP(flush_tlb_guest) KVM_X86_OP(vcpu_pre_run) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_hos= t.h index 60d430b4650f..04fc80112dfe 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1604,9 +1604,11 @@ struct kvm_x86_ops { =20 void (*flush_tlb_all)(struct kvm_vcpu *vcpu); void (*flush_tlb_current)(struct kvm_vcpu *vcpu); +#if IS_ENABLED(CONFIG_HYPERV) int (*flush_remote_tlbs)(struct kvm *kvm); int (*flush_remote_tlbs_range)(struct kvm *kvm, gfn_t gfn, gfn_t nr_pages); +#endif =20 /* * Flush any TLB entries associated with the given GVA. @@ -1814,6 +1816,7 @@ static inline struct kvm *kvm_arch_alloc_vm(void) #define __KVM_HAVE_ARCH_VM_FREE void kvm_arch_free_vm(struct kvm *kvm); =20 +#if IS_ENABLED(CONFIG_HYPERV) #define __KVM_HAVE_ARCH_FLUSH_REMOTE_TLB static inline int kvm_arch_flush_remote_tlb(struct kvm *kvm) { @@ -1823,6 +1826,7 @@ static inline int kvm_arch_flush_remote_tlb(struct kv= m *kvm) else return -ENOTSUPP; } +#endif =20 #define kvm_arch_pmi_in_guest(vcpu) \ ((vcpu) && (vcpu)->arch.handling_intr_from_guest) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 9e4cd8b4a202..0189dfecce1f 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -271,18 +271,24 @@ static inline unsigned long kvm_mmu_get_guest_pgd(str= uct kvm_vcpu *vcpu, =20 static inline bool kvm_available_flush_remote_tlbs_range(void) { +#if IS_ENABLED(CONFIG_HYPERV) return kvm_x86_ops.flush_remote_tlbs_range; +#else + return false; +#endif } =20 void kvm_flush_remote_tlbs_range(struct kvm *kvm, gfn_t start_gfn, gfn_t nr_pages) { +#if IS_ENABLED(CONFIG_HYPERV) int ret =3D -EOPNOTSUPP; =20 if (kvm_x86_ops.flush_remote_tlbs_range) ret =3D static_call(kvm_x86_flush_remote_tlbs_range)(kvm, start_gfn, nr_pages); if (ret) +#endif kvm_flush_remote_tlbs(kvm); } =20 base-commit: bc9e68820274c025840d3056d63f938d74ca35bb --=20