From: "Mi, Dapeng" <dapeng1.mi@linux.intel.com>
To: Zide Chen <zide.chen@intel.com>,
Sean Christopherson <seanjc@google.com>,
Paolo Bonzini <pbonzini@redhat.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
Jim Mattson <jmattson@google.com>,
Mingwei Zhang <mizhang@google.com>,
Das Sandipan <Sandipan.Das@amd.com>,
Shukla Manali <Manali.Shukla@amd.com>,
Falcon Thomas <thomas.falcon@intel.com>,
Xudong Hao <xudong.hao@intel.com>
Subject: Re: [PATCH v6 4/8] KVM: x86/pmu: Snapshot host IA32_PERF_CAPABILITIES in kvm_host
Date: Tue, 30 Jun 2026 10:19:29 +0800 [thread overview]
Message-ID: <82a6fffa-3fac-4444-806b-536b3a98c9f0@linux.intel.com> (raw)
In-Reply-To: <20260629231938.15129-5-zide.chen@intel.com>
Reviewed-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
On 6/30/2026 7:19 AM, Zide Chen wrote:
> From: Mingwei Zhang <mizhang@google.com>
>
> Cache the unadulterated snapshot of perf_capabilities so that KVM can
> compare guest vPMU capabilities against raw hardware capabilities.
>
> For example, if the host supports PERF_METRICS but it is not configured
> for the guest, KVM can use it to determine that RDPMC accesses must be
> intercepted.
>
> Signed-off-by: Mingwei Zhang <mizhang@google.com>
> Signed-off-by: Zide Chen <zide.chen@intel.com>
> ---
> v5: new patch.
> ---
> arch/x86/include/asm/kvm_host.h | 1 +
> arch/x86/kvm/vmx/vmx.c | 8 ++------
> arch/x86/kvm/x86.c | 4 ++++
> 3 files changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
> index dc9e4e8bfc07..80f638588bf7 100644
> --- a/arch/x86/include/asm/kvm_host.h
> +++ b/arch/x86/include/asm/kvm_host.h
> @@ -347,6 +347,7 @@ struct kvm_host_values {
> u64 xss;
> u64 s_cet;
> u64 arch_capabilities;
> + u64 perf_capabilities;
> };
> extern struct kvm_host_values kvm_host;
>
> diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
> index aded7039bd3e..b736b9ff965b 100644
> --- a/arch/x86/kvm/vmx/vmx.c
> +++ b/arch/x86/kvm/vmx/vmx.c
> @@ -8050,14 +8050,10 @@ void vmx_vcpu_after_set_cpuid(struct kvm_vcpu *vcpu)
> static __init u64 vmx_get_perf_capabilities(void)
> {
> u64 perf_cap = PERF_CAP_FW_WRITES;
> - u64 host_perf_cap = 0;
>
> if (!enable_pmu)
> return 0;
>
> - if (boot_cpu_has(X86_FEATURE_PDCM))
> - rdmsrq(MSR_IA32_PERF_CAPABILITIES, host_perf_cap);
> -
> if (!cpu_feature_enabled(X86_FEATURE_ARCH_LBR) &&
> !enable_mediated_pmu) {
> x86_perf_get_lbr(&vmx_lbr_caps);
> @@ -8070,11 +8066,11 @@ static __init u64 vmx_get_perf_capabilities(void)
> if (!vmx_lbr_caps.has_callstack)
> memset(&vmx_lbr_caps, 0, sizeof(vmx_lbr_caps));
> else if (vmx_lbr_caps.nr)
> - perf_cap |= host_perf_cap & PERF_CAP_LBR_FMT;
> + perf_cap |= kvm_host.perf_capabilities & PERF_CAP_LBR_FMT;
> }
>
> if (vmx_pebs_supported()) {
> - perf_cap |= host_perf_cap & PERF_CAP_PEBS_MASK;
> + perf_cap |= kvm_host.perf_capabilities & PERF_CAP_PEBS_MASK;
>
> /*
> * Disallow adaptive PEBS as it is functionally broken, can be
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index 8dbc0fa302a8..8e775855f9be 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -7032,6 +7032,10 @@ int kvm_x86_vendor_init(struct kvm_x86_init_ops *ops)
> if (boot_cpu_has(X86_FEATURE_ARCH_CAPABILITIES))
> rdmsrq(MSR_IA32_ARCH_CAPABILITIES, kvm_host.arch_capabilities);
>
> + if (boot_cpu_has(X86_FEATURE_PDCM))
> + rdmsrq_safe(MSR_IA32_PERF_CAPABILITIES,
> + &kvm_host.perf_capabilities);
> +
> WARN_ON_ONCE(kvm_nr_uret_msrs);
>
> r = ops->hardware_setup();
next prev parent reply other threads:[~2026-06-30 2:19 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-29 23:19 [PATCH V6 0/8] KVM: x86/pmu: Add hardware Topdown metrics support Zide Chen
2026-06-29 23:19 ` [PATCH v6 1/8] KVM: x86/pmu: Do not map fixed counters >= 3 to generic perf events Zide Chen
2026-06-30 2:13 ` Mi, Dapeng
2026-06-29 23:19 ` [PATCH v6 2/8] KVM: x86/pmu: Support Intel fixed counter 3 on mediated vPMU Zide Chen
2026-06-30 2:16 ` Mi, Dapeng
2026-06-29 23:19 ` [PATCH v6 3/8] KVM: x86/pmu: Rename and move vcpu_get_perf_capabilities() to pmu.h Zide Chen
2026-06-30 2:18 ` Mi, Dapeng
2026-06-29 23:19 ` [PATCH v6 4/8] KVM: x86/pmu: Snapshot host IA32_PERF_CAPABILITIES in kvm_host Zide Chen
2026-06-30 2:19 ` Mi, Dapeng [this message]
2026-06-29 23:19 ` [PATCH v6 5/8] KVM: x86/pmu: Support PERF_METRICS MSR in mediated vPMU Zide Chen
2026-06-30 2:20 ` Mi, Dapeng
2026-06-29 23:19 ` [PATCH v6 6/8] KVM: x86/pmu: Move RDPMC emulation into per-vendor callbacks Zide Chen
2026-06-30 2:23 ` Mi, Dapeng
2026-06-29 23:19 ` [PATCH v6 7/8] KVM: x86/pmu: Emulate RDPMC on performance metrics Zide Chen
2026-06-30 2:23 ` Mi, Dapeng
2026-06-29 23:19 ` [PATCH v6 8/8] KVM: selftests: Add PERF_METRICS and fixed counter 3 tests Zide Chen
2026-06-29 23:45 ` sashiko-bot
2026-06-30 2:36 ` Mi, Dapeng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=82a6fffa-3fac-4444-806b-536b3a98c9f0@linux.intel.com \
--to=dapeng1.mi@linux.intel.com \
--cc=Manali.Shukla@amd.com \
--cc=Sandipan.Das@amd.com \
--cc=jmattson@google.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mizhang@google.com \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=thomas.falcon@intel.com \
--cc=xudong.hao@intel.com \
--cc=zide.chen@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.