From nobody Sat Apr 11 22:46:19 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 686E9C19F2C for ; Wed, 3 Aug 2022 19:27:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238463AbiHCT1L (ORCPT ); Wed, 3 Aug 2022 15:27:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60072 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236240AbiHCT1F (ORCPT ); Wed, 3 Aug 2022 15:27:05 -0400 Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C5A4557231 for ; Wed, 3 Aug 2022 12:27:04 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id d31-20020a631d1f000000b0041a5a805e26so7111841pgd.16 for ; Wed, 03 Aug 2022 12:27:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:reply-to:from:to:cc; bh=nm7CFbOdnKtZDNkgkKBzXQSPp+dIl3jdjLzC+jO16zk=; b=UJ2itWk2ezkIYRhnzAmzoIQO8u9ey77vKkdIhOd9vs8Zeh71OH2Ir0xFAgTl5ekOdQ zg4kSUzcMulV8zPGAmflfEkY8hdvqVxKfwgo3tN6kvzJ7cctBjo+NdAb+qPg81Z31eH1 2k8GX3GntwsZ70h5FT00xRMSJlk7Ms902eCR6sQsk14inYSRrJn4PoHnxsJ6cCx+xWx6 A8tH6ERH0TGgjMT6bjFklvTFBR5/PHNbdqm1O3lq8/lEI/G+5r7PEnb2vhv19udY9ok7 V9hse3EWlAzb3IF2d7b2PyMdFA8w2Bj/vQj3EZzWcyi0aZAb+hIdq1wBC6EoFxSHijIr b9Mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc; bh=nm7CFbOdnKtZDNkgkKBzXQSPp+dIl3jdjLzC+jO16zk=; b=Zs5mjpSD+x/G5BBOshQlB01bn66pQ+thryMlqzSnfIhoqWXknukqYGyolVTIusD1NM hdjvpRoRKz+dT7c7nP1evt3L+qhmya5oiYmo/77ZfQsiG7UzNifC1yNKl7FM6ceX+s1K S3dy5PvS3vr88dGZQPOwENqE2tNVwpEM8+T8kcRb6FO3a9U0DR3GDN7PrNjHViA4yrhD S6mckHv8+W+LkUKDHB8kKmUj6Pyn41VVNYd7XtzM0RfzPb3z0jhLChPPLPa/BpTW6b3s AQkQS34zkFPkz0/EuEXlkfbe8PI9xxJaIH38cUxP5zUb5dr8i6cx/LlkHXD4kysvKUwf Misg== X-Gm-Message-State: AJIora9NgG6X6AhClifPMtuv5AQuFRQ27js08tH9j7FAWfXtYZEA+In+ U/IkaRHO/novQH5idoDRZ6ori5ykjPU= X-Google-Smtp-Source: AGRyM1smK3BViI7TxhEbyAjRfforzWrdjCXIGbu9LuouDuELMs/W7f0KHUYaF4H+R7SWS+UD94l95eGoDe8= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a63:e258:0:b0:41a:d92b:64f9 with SMTP id y24-20020a63e258000000b0041ad92b64f9mr21846257pgj.148.1659554824574; Wed, 03 Aug 2022 12:27:04 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 3 Aug 2022 19:26:52 +0000 In-Reply-To: <20220803192658.860033-1-seanjc@google.com> Message-Id: <20220803192658.860033-2-seanjc@google.com> Mime-Version: 1.0 References: <20220803192658.860033-1-seanjc@google.com> X-Mailer: git-send-email 2.37.1.559.g78731f0fdb-goog Subject: [PATCH v2 1/7] KVM: x86: Refresh PMU after writes to MSR_IA32_PERF_CAPABILITIES From: Sean Christopherson To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Sean Christopherson , Paolo Bonzini Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Like Xu Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Refresh the PMU if userspace modifies MSR_IA32_PERF_CAPABILITIES. KVM consumes the vCPU's PERF_CAPABILITIES when enumerating PEBS support, but relies on CPUID updates to refresh the PMU. I.e. KVM will do the wrong thing if userspace stuffs PERF_CAPABILITIES _after_ setting guest CPUID. Note, KVM may do the "wrong" thing if userspace changes PERF_CAPABILITIES after running the vCPU, i.e. after KVM_RUN. Similar to disallowing CPUID changes after KVM_RUN, KVM should also disallow changing feature MSRs after KVM_RUN to prevent unexpected behavior. That problem will be addressed separately at it affects MSRs other than PERF_CAPABILITES. Opportunistically fix a curly-brace indentation. Fixes: c59a1f106f5c ("KVM: x86/pmu: Add IA32_PEBS_ENABLE MSR emulation for = extended PEBS") Cc: Like Xu Signed-off-by: Sean Christopherson --- arch/x86/kvm/x86.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 33560bfa0cac..dc19298e7150 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -3546,9 +3546,9 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct = msr_data *msr_info) return 1; =20 vcpu->arch.perf_capabilities =3D data; - + kvm_pmu_refresh(vcpu); return 0; - } + } case MSR_EFER: return set_efer(vcpu, msr_info); case MSR_K7_HWCR: --=20 2.37.1.559.g78731f0fdb-goog From nobody Sat Apr 11 22:46:19 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 64F53C19F28 for ; Wed, 3 Aug 2022 19:27:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238496AbiHCT1Q (ORCPT ); Wed, 3 Aug 2022 15:27:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60096 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237931AbiHCT1H (ORCPT ); Wed, 3 Aug 2022 15:27:07 -0400 Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9933C564E5 for ; Wed, 3 Aug 2022 12:27:06 -0700 (PDT) Received: by mail-pf1-x44a.google.com with SMTP id p29-20020a056a000a1d00b0052d93f32bdbso4027988pfh.14 for ; Wed, 03 Aug 2022 12:27:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:reply-to:from:to:cc; bh=v6/mEopqhFY1D69DUbdL+MCeZPJSIwmGFWEXSi2+X5M=; b=dDizul2odF4KXcGl96z2JZqEiUseQsnNckZ4KWCDvQzwCqf9ZiomK8Br019BZTEwU1 xa7X8sjdAaen/2QF4p3mHmBpyv782xcoYUGcqBdMGu0VaPYJy3u4iWE3RI4y6Hk9RKLr Z+RoVudGF+on6Mt/eAKFAd/GpF1ipMT0jRTmLwGK7c8q40yG+C+9OyL7WWlobgm8BlpC XmfibJRDKtoDa/LknqEgBFEaKxM1o2jm9mW1BoCEz44fOe6qO8qZStyU56gT2bcwRiBV jxkNaO5W3qF7zjtgaEo5ul6dm3PWnPSDmFMfUmnw/Y7mFXKFok0o+GCxBLtywYFWow8M 6p3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc; bh=v6/mEopqhFY1D69DUbdL+MCeZPJSIwmGFWEXSi2+X5M=; b=YAfYIKNRaxeCXbQ3USTZeU/I3YdhbrH6oNDRSd+tNbIq2MLnFgEsGWlgw170lfQyIo GcgQ6+6/vJK8mQA61kW79hm89enU9eeANryekQh7NV5/kJaJjYdh/8bBKLHBYHSYCbEO qdp6oiBccqy4CMRi44elY338UNNm3ZhVW+X89XWsW+CK6yAs1W+rxpzkSNSko0ANFC/1 j8HoSEM4a1Sk+6IBL/ZJWyBe1/Zqbi8Ruhtc+JuX0RVJEYhR/8+9t6koyNsmIjxMoQ9C EO1xJaumNibyBFJmXf9sszpTTpNa6OK+yjBNAVquIBX9DjAnxwryjX5rrHEo063EIoOS FXZw== X-Gm-Message-State: ACgBeo3RiFIgpxBqE0IXhHoQUhzNR0eSUOGMT0OJyG0PcSSaQgUo1ULW tdjxmK1yvnX6dPN8oCtLBqwfKBlxRBY= X-Google-Smtp-Source: AA6agR6zxQ8tMq014wMaDX6OMKsRz5+Wsn+8kD/TGhjeMPf6x8qb0wiedAKEY6UqDxidmq5qbkjB1/Bpj2w= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:aa7:9431:0:b0:52d:d7f2:477e with SMTP id y17-20020aa79431000000b0052dd7f2477emr9765133pfo.7.1659554826214; Wed, 03 Aug 2022 12:27:06 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 3 Aug 2022 19:26:53 +0000 In-Reply-To: <20220803192658.860033-1-seanjc@google.com> Message-Id: <20220803192658.860033-3-seanjc@google.com> Mime-Version: 1.0 References: <20220803192658.860033-1-seanjc@google.com> X-Mailer: git-send-email 2.37.1.559.g78731f0fdb-goog Subject: [PATCH v2 2/7] perf/x86/core: Remove unnecessary stubs provided for KVM-only helpers From: Sean Christopherson To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Sean Christopherson , Paolo Bonzini Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Like Xu Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Remove CONFIG_PERF_EVENT=3Dn stubs for functions that are effectively KVM-only. KVM selects PERF_EVENT and will never consume the stubs. Dropping the unnecessary stubs will allow simplifying x86_perf_get_lbr() by getting rid of the impossible-to-hit error path (which KVM doesn't even check). Opportunstically reorganize the declarations to collapse multiple CONFIG_PERF_EVENTS #ifdefs. Signed-off-by: Sean Christopherson --- arch/x86/include/asm/perf_event.h | 53 ++++++++----------------------- 1 file changed, 13 insertions(+), 40 deletions(-) diff --git a/arch/x86/include/asm/perf_event.h b/arch/x86/include/asm/perf_= event.h index cc47044401ff..aba196172500 100644 --- a/arch/x86/include/asm/perf_event.h +++ b/arch/x86/include/asm/perf_event.h @@ -509,46 +509,18 @@ extern u64 perf_get_hw_event_config(int hw_event); extern void perf_check_microcode(void); extern void perf_clear_dirty_counters(void); extern int x86_perf_rdpmc_index(struct perf_event *event); -#else -static inline void perf_get_x86_pmu_capability(struct x86_pmu_capability *= cap) -{ - memset(cap, 0, sizeof(*cap)); -} =20 -static inline u64 perf_get_hw_event_config(int hw_event) -{ - return 0; -} - -static inline void perf_events_lapic_init(void) { } -static inline void perf_check_microcode(void) { } -#endif - -#if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_CPU_SUP_INTEL) +#ifdef CONFIG_CPU_SUP_INTEL extern struct perf_guest_switch_msr *perf_guest_get_msrs(int *nr, void *da= ta); extern int x86_perf_get_lbr(struct x86_pmu_lbr *lbr); -#else -struct perf_guest_switch_msr *perf_guest_get_msrs(int *nr, void *data); -static inline int x86_perf_get_lbr(struct x86_pmu_lbr *lbr) -{ - return -1; -} -#endif +extern void intel_pt_handle_vmx(int on); +#endif /* CONFIG_CPU_SUP_INTEL */ =20 -#ifdef CONFIG_CPU_SUP_INTEL - extern void intel_pt_handle_vmx(int on); -#else -static inline void intel_pt_handle_vmx(int on) -{ +#ifdef CONFIG_CPU_SUP_AMD +extern void amd_pmu_enable_virt(void); +extern void amd_pmu_disable_virt(void); =20 -} -#endif - -#if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_CPU_SUP_AMD) - extern void amd_pmu_enable_virt(void); - extern void amd_pmu_disable_virt(void); - -#if defined(CONFIG_PERF_EVENTS_AMD_BRS) +#ifdef CONFIG_PERF_EVENTS_AMD_BRS =20 #define PERF_NEEDS_LOPWR_CB 1 =20 @@ -566,12 +538,13 @@ static inline void perf_lopwr_cb(bool lopwr_in) static_call_mod(perf_lopwr_cb)(lopwr_in); } =20 -#endif /* PERF_NEEDS_LOPWR_CB */ +#endif /* CONFIG_PERF_EVENTS_AMD_BRS */ +#endif /* CONFIG_CPU_SUP_AMD */ =20 -#else - static inline void amd_pmu_enable_virt(void) { } - static inline void amd_pmu_disable_virt(void) { } -#endif +#else /* !CONFIG_PERF_EVENTS */ +static inline void perf_events_lapic_init(void) { } +static inline void perf_check_microcode(void) { } +#endif /* CONFIG_PERF_EVENTS */ =20 #define arch_perf_out_copy_user copy_from_user_nmi =20 --=20 2.37.1.559.g78731f0fdb-goog From nobody Sat Apr 11 22:46:19 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 457B1C19F2D for ; Wed, 3 Aug 2022 19:27:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238571AbiHCT1T (ORCPT ); Wed, 3 Aug 2022 15:27:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60156 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238301AbiHCT1J (ORCPT ); Wed, 3 Aug 2022 15:27:09 -0400 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5EF715727A for ; Wed, 3 Aug 2022 12:27:08 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id s6-20020a17090a764600b001f551416ef5so797813pjl.4 for ; Wed, 03 Aug 2022 12:27:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:reply-to:from:to:cc; bh=M8ovGhzxNi7TT4QpXAtpoUmOo1wqUNy+ycPxrvboNqY=; b=PmTq74m3OAW+mdBUVHtZuRyPSZSQFiucZ6qIpbJfNFw8tuNx4AenCOZ4GC10Wvedux I6LtTBvTGanR9V0VSYyixRM+IFhE6rlu8kWOjOaOGZDwNmAJxceo0Km4DPAXg4H2E1rT mup74jwLSded8usdiM3BOpiType/StEUkhnhfDwlD1E7SoUwM3ejy2SWmj6aKOBV2XfH UbqBldM5ZdtkNHELr9Q8QJWBzLqxnWESbugkfAkvuzFaXq88g93ChcmNBJXiK9oWvh/9 y1tWycthZEzuxuRPOIAIvlmvxqngWvuaUzMNOgJngA9NKq2H2KkIYOw7u48fGmz/AFCk YsJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc; bh=M8ovGhzxNi7TT4QpXAtpoUmOo1wqUNy+ycPxrvboNqY=; b=FEGf06wu71C9mxgHpPC8RHTrbxPK3zL/oqT9zu7oBuYFgI/4y98MlDdoEmyj2ijfIX 3sv2MrhBZ14uEmnXca9ajQcCuwkORdPHgcenxZ/yqZ1LLUNFjUNecnzQJrjuKlBbt491 j+HKTBFD4dESktW77rlbECQSdRamnD2qtuOoF7pvW9kCvu1+z1n6t42TquJ3lxhGCMab F1BqWF/bnO2hjSrOe7cT/UYkZQ1zdP8Y7Fval83V+QxxzyDU5MKjzv/E0arq+8CQy7SE 11UELJr26xFAWHcs3dczXN6JyPFzeYQc4RWUzZUgT0cUiexa6zgQqkhR8aSrr+7DWqPC Prhg== X-Gm-Message-State: ACgBeo3FPCd7hL0P2NYTu3ckb6+Rw9WPULhu9VeD3p+HF8OjywOVHjGp uR7nYzZflZY4NOuHtmhmaSdPDGlT8AY= X-Google-Smtp-Source: AA6agR62hcM0a/MWqBP3Ttz5aODILaJxPENcv1VXOYqSYQh+MQec1dO1rNpqdChbUfAtNZP3d/fSILQAdZ4= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90b:4c8d:b0:1f5:29ef:4a36 with SMTP id my13-20020a17090b4c8d00b001f529ef4a36mr6536897pjb.127.1659554827779; Wed, 03 Aug 2022 12:27:07 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 3 Aug 2022 19:26:54 +0000 In-Reply-To: <20220803192658.860033-1-seanjc@google.com> Message-Id: <20220803192658.860033-4-seanjc@google.com> Mime-Version: 1.0 References: <20220803192658.860033-1-seanjc@google.com> X-Mailer: git-send-email 2.37.1.559.g78731f0fdb-goog Subject: [PATCH v2 3/7] perf/x86/core: Drop the unnecessary return value from x86_perf_get_lbr() From: Sean Christopherson To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Sean Christopherson , Paolo Bonzini Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Like Xu Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Drop the return value from x86_perf_get_lbr() now that there's no stub, i.e. now that success is guaranteed (which is a bit of a lie since success was always guaranteed, it's just more obvious now). Signed-off-by: Sean Christopherson --- arch/x86/events/intel/lbr.c | 6 +----- arch/x86/include/asm/perf_event.h | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/arch/x86/events/intel/lbr.c b/arch/x86/events/intel/lbr.c index 4f70fb6c2c1e..b8ad31c52cf0 100644 --- a/arch/x86/events/intel/lbr.c +++ b/arch/x86/events/intel/lbr.c @@ -1868,10 +1868,8 @@ void __init intel_pmu_arch_lbr_init(void) * x86_perf_get_lbr - get the LBR records information * * @lbr: the caller's memory to store the LBR records information - * - * Returns: 0 indicates the LBR info has been successfully obtained */ -int x86_perf_get_lbr(struct x86_pmu_lbr *lbr) +void x86_perf_get_lbr(struct x86_pmu_lbr *lbr) { int lbr_fmt =3D x86_pmu.intel_cap.lbr_format; =20 @@ -1879,8 +1877,6 @@ int x86_perf_get_lbr(struct x86_pmu_lbr *lbr) lbr->from =3D x86_pmu.lbr_from; lbr->to =3D x86_pmu.lbr_to; lbr->info =3D (lbr_fmt =3D=3D LBR_FORMAT_INFO) ? x86_pmu.lbr_info : 0; - - return 0; } EXPORT_SYMBOL_GPL(x86_perf_get_lbr); =20 diff --git a/arch/x86/include/asm/perf_event.h b/arch/x86/include/asm/perf_= event.h index aba196172500..102fd3ad4605 100644 --- a/arch/x86/include/asm/perf_event.h +++ b/arch/x86/include/asm/perf_event.h @@ -512,7 +512,7 @@ extern int x86_perf_rdpmc_index(struct perf_event *even= t); =20 #ifdef CONFIG_CPU_SUP_INTEL extern struct perf_guest_switch_msr *perf_guest_get_msrs(int *nr, void *da= ta); -extern int x86_perf_get_lbr(struct x86_pmu_lbr *lbr); +extern void x86_perf_get_lbr(struct x86_pmu_lbr *lbr); extern void intel_pt_handle_vmx(int on); #endif /* CONFIG_CPU_SUP_INTEL */ =20 --=20 2.37.1.559.g78731f0fdb-goog From nobody Sat Apr 11 22:46:19 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 48AFAC19F28 for ; Wed, 3 Aug 2022 19:27:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238574AbiHCT1X (ORCPT ); Wed, 3 Aug 2022 15:27:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60234 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238450AbiHCT1K (ORCPT ); Wed, 3 Aug 2022 15:27:10 -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 CCE355727A for ; Wed, 3 Aug 2022 12:27:09 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id f128-20020a636a86000000b0041a4b07b039so7105226pgc.5 for ; Wed, 03 Aug 2022 12:27:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:reply-to:from:to:cc; bh=pubjVED0BoBlj/p5UniQdmKFhKP0erdMehcit07w1Xc=; b=V/n/vMZRu+2+sx1k/94A1X+hKQmzD4su5cyvN0W8gCb+UDecM7Dzc0xv9fxSXNlzbg WrhFFxqVaCUv8c+72XHzpgT9KPhxgIVj92G8orOu0r2DNchv+9GzjRRyT4hIA5YinsjM snGjCqI4NIydpKY3u/9H4s2FNN8wMXyEOaWMlydbCNrz+/ixl1+0OE/mI9oajENTUB9M hshvVMs5lxYdozh0MAYYbYwwPbZFJS4XHI1/qmx1Yrm7A1h9p4vxUgj5/Rw5LivYhI/q LSgckFpjYIp/4OeZttuaIrxJ+A6wBll4G0+m3gaGmuKQ38MnZlLvpv34a1fNOSZLfpQD GzeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc; bh=pubjVED0BoBlj/p5UniQdmKFhKP0erdMehcit07w1Xc=; b=BTKRAnIj1e4AxdtIdiTGvn96/74qngsrEap/upL6jRiZZ0a2Bu2/GI1P7Oxasuamr6 EkfT11F9t6WQH0rZmB0XL61maXGwHiJmUooWn796rolfRm/ER6Q8/+BKXxbA+Ns0LN6R M835aedKcxNAND1TBC10+ytZXHUIeIz5O6ZwOcUo/sOsqdA70oNGbgL9Hb0cdy+ap9Vh BiVKWvMW++rJXsWw4izHl7BumlIMWS6mgU4CJZeBd1Ix/0rYgXqm/e+sLGqmP5/IrLFd znJuPNjK/bNxUgshMubHJgu1f3pydR1DrzwfUVDXt19z1LpQFEA/kcwbYgIlJfTBdX9P LYNg== X-Gm-Message-State: ACgBeo3dMXkCHjinaOCADx531l0E2uXrzErjX8T2x2bnbGLtXXFZdubh SyXgxRA6PWHd7x4jVhNT8hQKB8HHc4o= X-Google-Smtp-Source: AA6agR4SmuyM1ck3bZ1o8K58VylIsD5sfq4HiuedgIvq/RCqq3O2egwmPnV3LEHYaJ84anCSgkQUKLE2jlA= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a63:80c7:0:b0:41c:62dd:2109 with SMTP id j190-20020a6380c7000000b0041c62dd2109mr7897814pgd.449.1659554829551; Wed, 03 Aug 2022 12:27:09 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 3 Aug 2022 19:26:55 +0000 In-Reply-To: <20220803192658.860033-1-seanjc@google.com> Message-Id: <20220803192658.860033-5-seanjc@google.com> Mime-Version: 1.0 References: <20220803192658.860033-1-seanjc@google.com> X-Mailer: git-send-email 2.37.1.559.g78731f0fdb-goog Subject: [PATCH v2 4/7] KVM: VMX: Advertise PMU LBRs if and only if perf supports LBRs From: Sean Christopherson To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Sean Christopherson , Paolo Bonzini Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Like Xu Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Advertise LBR support to userspace via MSR_IA32_PERF_CAPABILITIES if and only if perf fully supports LBRs. Perf may disable LBRs (by zeroing the number of LBRs) even on platforms the allegedly support LBRs, e.g. if probing any LBR MSRs during setup fails. Fixes: be635e34c284 ("KVM: vmx/pmu: Expose LBR_FMT in the MSR_IA32_PERF_CAP= ABILITIES") Reported-by: Like Xu Signed-off-by: Sean Christopherson --- arch/x86/kvm/vmx/capabilities.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/vmx/capabilities.h b/arch/x86/kvm/vmx/capabilitie= s.h index c5e5dfef69c7..d2fdaf888d33 100644 --- a/arch/x86/kvm/vmx/capabilities.h +++ b/arch/x86/kvm/vmx/capabilities.h @@ -404,6 +404,7 @@ static inline bool vmx_pebs_supported(void) static inline u64 vmx_get_perf_capabilities(void) { u64 perf_cap =3D PMU_CAP_FW_WRITES; + struct x86_pmu_lbr lbr; u64 host_perf_cap =3D 0; =20 if (!enable_pmu) @@ -412,7 +413,9 @@ static inline u64 vmx_get_perf_capabilities(void) if (boot_cpu_has(X86_FEATURE_PDCM)) rdmsrl(MSR_IA32_PERF_CAPABILITIES, host_perf_cap); =20 - perf_cap |=3D host_perf_cap & PMU_CAP_LBR_FMT; + x86_perf_get_lbr(&lbr); + if (lbr.nr) + perf_cap |=3D host_perf_cap & PMU_CAP_LBR_FMT; =20 if (vmx_pebs_supported()) { perf_cap |=3D host_perf_cap & PERF_CAP_PEBS_MASK; --=20 2.37.1.559.g78731f0fdb-goog From nobody Sat Apr 11 22:46:19 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E69BBC19F28 for ; Wed, 3 Aug 2022 19:27:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238609AbiHCT10 (ORCPT ); Wed, 3 Aug 2022 15:27:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60330 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238471AbiHCT1N (ORCPT ); Wed, 3 Aug 2022 15:27:13 -0400 Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D321156BBD for ; Wed, 3 Aug 2022 12:27:11 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id r74-20020a632b4d000000b0041bc393913eso4503272pgr.10 for ; Wed, 03 Aug 2022 12:27:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:reply-to:from:to:cc; bh=S+w5TrS2aE3Gtpp3HC8mmkT4Qt+4IBb4hazG/v7qagI=; b=lmEYlMMVO7RosQH1pARCRiSvkT4wsXXKXfUp+jCo+GsJZRkS34/+uMIQSRuadC24YK hppsOHONTrzjUsbf2sjkvaEkzGHKAc8xMom3WelINp2MTfetiMQ5h6CFGQE1r5Eb3eai yS/7sxnhdwOhTm0kXBk9JVK9mQe9iiU+ZZAs7VpzaW6v1OWSlt65skDr2IGCB8IkeX+P 5zumLR1VErgkKXZiFu8nKojDR2XAoqZiAavHumGeIJwK3yK+ClI4HAjmw/KRk5FbRPtJ FuWNWP6APBTl0PNGV6O09kdS1qqTb3q5fX6fVJU2iJYgvuPukPluausbL8Ll23seGPT/ aXXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc; bh=S+w5TrS2aE3Gtpp3HC8mmkT4Qt+4IBb4hazG/v7qagI=; b=if6HqFayFrKU+C+jS3nUvGv95QqZvNK16nkLvhx/aNfgdZcXT6A+d4nXo59HcaGge1 R8sxcRKcjxM7oE3MdFcf7WrZ5z+OJ5ZZUD5W7uz49Cdg9+QfC+NCcsDr+PWB4ee7lBm8 CWwS/wjyhbCGO1rq+s/Upuw0eX4A/fSo1jyX+BEY6eGSvWuJWnq6ZPbbBg5ofCYf+6TY h1JOjgzx7px7eLxrA8sVBa5cIShOsddISwlEbL8srIRgWrEAyhSGS77QlOC+Oys0EFdK Uq2A7axepyycvRbjgUCUfZ7bd9Jo6vn0pNgm+FyZHNbvEI+a4Cob6yvR5BTLsP4s2ese iYBA== X-Gm-Message-State: ACgBeo1b2M03w8Az+b0vg/T7guLshxiHkMJqhVhDl1fIOIAcupbcoZ4o zv2VSCa4cUirWByxN6iz3KNZuuew5Gc= X-Google-Smtp-Source: AA6agR4o3cxWVgS7VIytOO8dO0l35jbwyG3DPxCP1ZD9nJgR/3J065dpus5g1cP/VkTWwQK9ibmPsnduNho= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:903:228f:b0:16f:1b48:230c with SMTP id b15-20020a170903228f00b0016f1b48230cmr2674111plh.78.1659554831157; Wed, 03 Aug 2022 12:27:11 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 3 Aug 2022 19:26:56 +0000 In-Reply-To: <20220803192658.860033-1-seanjc@google.com> Message-Id: <20220803192658.860033-6-seanjc@google.com> Mime-Version: 1.0 References: <20220803192658.860033-1-seanjc@google.com> X-Mailer: git-send-email 2.37.1.559.g78731f0fdb-goog Subject: [PATCH v2 5/7] KVM: VMX: Use proper type-safe functions for vCPU => LBRs helpers From: Sean Christopherson To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Sean Christopherson , Paolo Bonzini Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Like Xu Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Turn vcpu_to_lbr_desc() and vcpu_to_lbr_records() into functions in order to provide type safety, to document exactly what they return, and to allow consuming the helpers in vmx.h. Move the definitions as necessary (the macros "reference" to_vmx() before its definition). Opportunistically move the other PMU definitions/declarations to keep the PMU stuff bundled together. No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/kvm/vmx/vmx.h | 50 ++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/arch/x86/kvm/vmx/vmx.h b/arch/x86/kvm/vmx/vmx.h index fb8e3480a9d7..35b39dab175d 100644 --- a/arch/x86/kvm/vmx/vmx.h +++ b/arch/x86/kvm/vmx/vmx.h @@ -6,6 +6,7 @@ =20 #include #include +#include =20 #include "capabilities.h" #include "../kvm_cache_regs.h" @@ -92,27 +93,6 @@ union vmx_exit_reason { u32 full; }; =20 -static inline bool intel_pmu_has_perf_global_ctrl(struct kvm_pmu *pmu) -{ - /* - * Architecturally, Intel's SDM states that IA32_PERF_GLOBAL_CTRL is - * supported if "CPUID.0AH: EAX[7:0] > 0", i.e. if the PMU version is - * greater than zero. However, KVM only exposes and emulates the MSR - * to/for the guest if the guest PMU supports at least "Architectural - * Performance Monitoring Version 2". - */ - return pmu->version > 1; -} - -#define vcpu_to_lbr_desc(vcpu) (&to_vmx(vcpu)->lbr_desc) -#define vcpu_to_lbr_records(vcpu) (&to_vmx(vcpu)->lbr_desc.records) - -void intel_pmu_cross_mapped_check(struct kvm_pmu *pmu); -bool intel_pmu_lbr_is_enabled(struct kvm_vcpu *vcpu); - -int intel_pmu_create_guest_lbr_event(struct kvm_vcpu *vcpu); -void vmx_passthrough_lbr_msrs(struct kvm_vcpu *vcpu); - struct lbr_desc { /* Basic info about guest LBR records. */ struct x86_pmu_lbr records; @@ -542,6 +522,34 @@ static inline struct vcpu_vmx *to_vmx(struct kvm_vcpu = *vcpu) return container_of(vcpu, struct vcpu_vmx, vcpu); } =20 +static inline struct lbr_desc *vcpu_to_lbr_desc(struct kvm_vcpu *vcpu) +{ + return &to_vmx(vcpu)->lbr_desc; +} + +static inline struct x86_pmu_lbr *vcpu_to_lbr_records(struct kvm_vcpu *vcp= u) +{ + return &vcpu_to_lbr_desc(vcpu)->records; +} + +static inline bool intel_pmu_has_perf_global_ctrl(struct kvm_pmu *pmu) +{ + /* + * Architecturally, Intel's SDM states that IA32_PERF_GLOBAL_CTRL is + * supported if "CPUID.0AH: EAX[7:0] > 0", i.e. if the PMU version is + * greater than zero. However, KVM only exposes and emulates the MSR + * to/for the guest if the guest PMU supports at least "Architectural + * Performance Monitoring Version 2". + */ + return pmu->version > 1; +} + +void intel_pmu_cross_mapped_check(struct kvm_pmu *pmu); +bool intel_pmu_lbr_is_enabled(struct kvm_vcpu *vcpu); + +int intel_pmu_create_guest_lbr_event(struct kvm_vcpu *vcpu); +void vmx_passthrough_lbr_msrs(struct kvm_vcpu *vcpu); + static inline unsigned long vmx_get_exit_qual(struct kvm_vcpu *vcpu) { struct vcpu_vmx *vmx =3D to_vmx(vcpu); --=20 2.37.1.559.g78731f0fdb-goog From nobody Sat Apr 11 22:46:19 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0C96EC19F28 for ; Wed, 3 Aug 2022 19:27:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238700AbiHCT1l (ORCPT ); Wed, 3 Aug 2022 15:27:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60330 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238558AbiHCT1S (ORCPT ); Wed, 3 Aug 2022 15:27:18 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 59CAB5B795 for ; Wed, 3 Aug 2022 12:27:13 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id s4-20020a17090a760400b001f3120342daso7640239pjk.4 for ; Wed, 03 Aug 2022 12:27:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:reply-to:from:to:cc; bh=GeP9RItuT5cX0x8bod8txy1j8Bx4gMfigExcAQKorEA=; b=TH39iZbQfjrOovP6PSkDuCuS1K49VQy+rHdokoRe8Vd6fIqvucm5OmGFpX08KC9cko qtR88vT2RLqC05Cjmf6Qzexgo6uCk80zekZzYc6Gbs2AHwjSuiMZWV6RxkWIqgYCP9YV EpjmxTFjxvjk3OhnIB55DRUzd2ILIDgUtghPGZ1aErMB5J/1QFgVyJRyjCqikMW9qkmj glgZaRijKDZxBX1i9q5SGvO4pQzh5QxwCQppSNvjsedGAq1C2fgTBZ7SyEfTM6dcfk9/ 9cugZPgy2EL0e253nEbHKTfXTshu9tCvTxTdR73CbL3M21WKLLHajXj1R15ryMZU9Scg UIFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc; bh=GeP9RItuT5cX0x8bod8txy1j8Bx4gMfigExcAQKorEA=; b=2dzD+z+hkf46iaMirVn9bHQr95YmQ673j43owm8ss0yR4/BycztZ0S/CT0r5JbG2kn vUjgk9y7Cw2lL5DJQerEusJXDW11ENCjZFxa3uyla9ufb8uRJHavJ3Sjgdud0faIUOSs HTlTGMwlj3R/9HuSFrASvfhrT1iEuZPE48kaxODHXcMepP3FQNuMFn+ORkHC+3ZkEt44 a2e3G3i7yANVLQdsnrFQb2wAKfK2wPjWvrpce9Zydpe2VUEVGQx/Mt+AnzAGCuFi6MQm SdOjknyhAwiYS3roEjRrCs6EmKcyqdkvrX5L7LAB3cwNO/6RoTWf08lOo2BhNrVXFCw7 7ikQ== X-Gm-Message-State: ACgBeo1XmsgMRACPk+lwD3MRwwEuT3NWNOoORArQHVogZSrcdEJgwLOW YUB7mQthuIW2kaTuBLTF6yOALz0HM/0= X-Google-Smtp-Source: AA6agR70W4WfP/jyajIwpsWZD3Yz/LI6VDrsaqbQLRj42kpQfzh6LodaF+ZwCJ1s72gveDyQK98NJvXN98c= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:903:110e:b0:16c:defc:a092 with SMTP id n14-20020a170903110e00b0016cdefca092mr27719373plh.143.1659554832817; Wed, 03 Aug 2022 12:27:12 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 3 Aug 2022 19:26:57 +0000 In-Reply-To: <20220803192658.860033-1-seanjc@google.com> Message-Id: <20220803192658.860033-7-seanjc@google.com> Mime-Version: 1.0 References: <20220803192658.860033-1-seanjc@google.com> X-Mailer: git-send-email 2.37.1.559.g78731f0fdb-goog Subject: [PATCH v2 6/7] KVM: VMX: Adjust number of LBR records for PERF_CAPABILITIES at refresh From: Sean Christopherson To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Sean Christopherson , Paolo Bonzini Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Like Xu Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that the PMU is refreshed when MSR_IA32_PERF_CAPABILITIES is written by host userspace, zero out the number of LBR records for a vCPU during PMU refresh if PMU_CAP_LBR_FMT is not set in PERF_CAPABILITIES instead of handling the check at run-time. guest_cpuid_has() is expensive due to the linear search of guest CPUID entries, intel_pmu_lbr_is_enabled() is checked on every VM-Enter, _and_ simply enumerating the same "Model" as the host causes KVM to set the number of LBR records to a non-zero value. Signed-off-by: Sean Christopherson --- arch/x86/kvm/vmx/pmu_intel.c | 12 +++--------- arch/x86/kvm/vmx/vmx.h | 7 +++++-- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/arch/x86/kvm/vmx/pmu_intel.c b/arch/x86/kvm/vmx/pmu_intel.c index 862c1a4d971b..c399637a3a79 100644 --- a/arch/x86/kvm/vmx/pmu_intel.c +++ b/arch/x86/kvm/vmx/pmu_intel.c @@ -171,13 +171,6 @@ static inline struct kvm_pmc *get_fw_gp_pmc(struct kvm= _pmu *pmu, u32 msr) return get_gp_pmc(pmu, msr, MSR_IA32_PMC0); } =20 -bool intel_pmu_lbr_is_enabled(struct kvm_vcpu *vcpu) -{ - struct x86_pmu_lbr *lbr =3D vcpu_to_lbr_records(vcpu); - - return lbr->nr && (vcpu_get_perf_capabilities(vcpu) & PMU_CAP_LBR_FMT); -} - static bool intel_pmu_is_valid_lbr_msr(struct kvm_vcpu *vcpu, u32 index) { struct x86_pmu_lbr *records =3D vcpu_to_lbr_records(vcpu); @@ -592,7 +585,9 @@ static void intel_pmu_refresh(struct kvm_vcpu *vcpu) bitmap_set(pmu->all_valid_pmc_idx, INTEL_PMC_MAX_GENERIC, pmu->nr_arch_fixed_counters); =20 - if (cpuid_model_is_consistent(vcpu)) + perf_capabilities =3D vcpu_get_perf_capabilities(vcpu); + if (cpuid_model_is_consistent(vcpu) && + (perf_capabilities & PMU_CAP_LBR_FMT)) x86_perf_get_lbr(&lbr_desc->records); else lbr_desc->records.nr =3D 0; @@ -600,7 +595,6 @@ static void intel_pmu_refresh(struct kvm_vcpu *vcpu) if (lbr_desc->records.nr) bitmap_set(pmu->all_valid_pmc_idx, INTEL_PMC_IDX_FIXED_VLBR, 1); =20 - perf_capabilities =3D vcpu_get_perf_capabilities(vcpu); if (perf_capabilities & PERF_CAP_PEBS_FORMAT) { if (perf_capabilities & PERF_CAP_PEBS_BASELINE) { pmu->pebs_enable_mask =3D counter_mask; diff --git a/arch/x86/kvm/vmx/vmx.h b/arch/x86/kvm/vmx/vmx.h index 35b39dab175d..413702dc1315 100644 --- a/arch/x86/kvm/vmx/vmx.h +++ b/arch/x86/kvm/vmx/vmx.h @@ -532,6 +532,11 @@ static inline struct x86_pmu_lbr *vcpu_to_lbr_records(= struct kvm_vcpu *vcpu) return &vcpu_to_lbr_desc(vcpu)->records; } =20 +static inline bool intel_pmu_lbr_is_enabled(struct kvm_vcpu *vcpu) +{ + return !!vcpu_to_lbr_records(vcpu)->nr; +} + static inline bool intel_pmu_has_perf_global_ctrl(struct kvm_pmu *pmu) { /* @@ -545,8 +550,6 @@ static inline bool intel_pmu_has_perf_global_ctrl(struc= t kvm_pmu *pmu) } =20 void intel_pmu_cross_mapped_check(struct kvm_pmu *pmu); -bool intel_pmu_lbr_is_enabled(struct kvm_vcpu *vcpu); - int intel_pmu_create_guest_lbr_event(struct kvm_vcpu *vcpu); void vmx_passthrough_lbr_msrs(struct kvm_vcpu *vcpu); =20 --=20 2.37.1.559.g78731f0fdb-goog From nobody Sat Apr 11 22:46:19 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0C556C19F28 for ; Wed, 3 Aug 2022 19:27:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238641AbiHCT1t (ORCPT ); Wed, 3 Aug 2022 15:27:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60230 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238605AbiHCT10 (ORCPT ); Wed, 3 Aug 2022 15:27:26 -0400 Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 902765B7AB for ; Wed, 3 Aug 2022 12:27:15 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id c11-20020a170902d48b00b0016f093907e0so2748250plg.20 for ; Wed, 03 Aug 2022 12:27:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:reply-to:from:to:cc; bh=miAlPwrbCQgN0E56eM5ssFJVYzMR4KpxRDlfQ+ZlXIY=; b=D0UbA+P6z2AObS7Jny22QIU9JpwXlxc7eVpeSbs4iLwVBu/ML/aZ6JaS3Wagmy9rNQ 243ST+j1zEGSYdXQK4HrC7rGsRSmx4OX6MIU11kiQSYK0dB52FW9aB+uz+1fLWMSbgqE PmZkbB8H6w6xE6GIqOnzw6d5sBC7h8E3Q3ZR+Rlk8wA/I0fN1IhOJpUMbRocequv6p35 OKppsjNxoCJgNzY5Zn7LxjKZLKcP2YdgIz4sDxr2FPqwiwXJAKQpdDpZ4ir0Zl2vzz+d Qsml54AQ25D78PJKwfbH2VBwg+G7LzBVIFK8K3SXh3VJu8Njpk0iPw5Mzv1Frl4jnib0 aibg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc; bh=miAlPwrbCQgN0E56eM5ssFJVYzMR4KpxRDlfQ+ZlXIY=; b=zrZ1rjF7rx2kX1ve92WFRRtxPWSajRol8Kb/QTx3rUHzh722rUtbSxEyE7fmWQURfd hoSgVPtAga/K1Y1HANoBbMEcZgXhAkSL972oV4PNDMf9lTlyHHvnIB67e5HzcaI853DQ VFRIZ0N/t2ld7Txw/Zt5jVKZMPvNwwdpn14kL/wbfRn3+VPa15AQNI2S+PuxctcHRy62 JZgPJMGJWmAzfh0/Cx7xIvN0ECz9nmHsMpBZrv+G9HBOQnemtepI2psc6bazPtwlklgP V9HEGIcxRP9+7Tz9j4D7YhlO4QWhBRWQMqO5JDWEYtBKHAoXhvRWT9IEy3if96D/hVdI i9mw== X-Gm-Message-State: ACgBeo2X4xrmEfA4Y0WtaziWjMWIWfbZjqD8G8vjIpiG3GAbN9h/uol7 s7bQ0i9C/nEHJhaBnxD8bo92jmDmqgo= X-Google-Smtp-Source: AA6agR6lAdTPvlttjsLtXWWxIk5IZzJW8lJsYP3jKoyPIMRir4soD844K2FCZGswawiXrim1VMllZqU/H90= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1786:b0:52e:625d:a08d with SMTP id s6-20020a056a00178600b0052e625da08dmr730293pfg.76.1659554834636; Wed, 03 Aug 2022 12:27:14 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 3 Aug 2022 19:26:58 +0000 In-Reply-To: <20220803192658.860033-1-seanjc@google.com> Message-Id: <20220803192658.860033-8-seanjc@google.com> Mime-Version: 1.0 References: <20220803192658.860033-1-seanjc@google.com> X-Mailer: git-send-email 2.37.1.559.g78731f0fdb-goog Subject: [PATCH v2 7/7] KVM: VMX: Simplify capability check when handling PERF_CAPABILITIES write From: Sean Christopherson To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Sean Christopherson , Paolo Bonzini Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Like Xu Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Explicitly check for the absence of host support for LBRs or PEBS when userspace attempts to enable said features by writing PERF_CAPABILITIES. Comparing host support against the incoming value is unnecessary and weird since the checks are buried inside an if-statement that verifies userspace wants to enable the feature. No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/kvm/vmx/vmx.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index d7f8331d6f7e..0ada0ee234b7 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -2323,15 +2323,13 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struc= t msr_data *msr_info) if (data && !vcpu_to_pmu(vcpu)->version) return 1; if (data & PMU_CAP_LBR_FMT) { - if ((data & PMU_CAP_LBR_FMT) !=3D - (vmx_get_perf_capabilities() & PMU_CAP_LBR_FMT)) + if (!(vmx_get_perf_capabilities() & PMU_CAP_LBR_FMT)) return 1; if (!cpuid_model_is_consistent(vcpu)) return 1; } if (data & PERF_CAP_PEBS_FORMAT) { - if ((data & PERF_CAP_PEBS_MASK) !=3D - (vmx_get_perf_capabilities() & PERF_CAP_PEBS_MASK)) + if (!(vmx_get_perf_capabilities() & PERF_CAP_PEBS_MASK)) return 1; if (!guest_cpuid_has(vcpu, X86_FEATURE_DS)) return 1; --=20 2.37.1.559.g78731f0fdb-goog