提交 4b4191b8 编写于 作者: S Sean Christopherson 提交者: Paolo Bonzini

perf/x86: Refuse to export capabilities for hybrid PMUs

Now that KVM disables vPMU support on hybrid CPUs, WARN and return zeros
if perf_get_x86_pmu_capability() is invoked on a hybrid CPU.  The helper
doesn't provide an accurate accounting of the PMU capabilities for hybrid
CPUs and needs to be enhanced if KVM, or anything else outside of perf,
wants to act on the PMU capabilities.

Cc: stable@vger.kernel.org
Cc: Andrew Cooper <Andrew.Cooper3@citrix.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Link: https://lore.kernel.org/all/20220818181530.2355034-1-kan.liang@linux.intel.comSigned-off-by: NSean Christopherson <seanjc@google.com>
Message-Id: <20230208204230.1360502-3-seanjc@google.com>
Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
上级 4d7404e5
...@@ -2974,17 +2974,19 @@ unsigned long perf_misc_flags(struct pt_regs *regs) ...@@ -2974,17 +2974,19 @@ unsigned long perf_misc_flags(struct pt_regs *regs)
void perf_get_x86_pmu_capability(struct x86_pmu_capability *cap) void perf_get_x86_pmu_capability(struct x86_pmu_capability *cap)
{ {
if (!x86_pmu_initialized()) { /* This API doesn't currently support enumerating hybrid PMUs. */
if (WARN_ON_ONCE(cpu_feature_enabled(X86_FEATURE_HYBRID_CPU)) ||
!x86_pmu_initialized()) {
memset(cap, 0, sizeof(*cap)); memset(cap, 0, sizeof(*cap));
return; return;
} }
cap->version = x86_pmu.version;
/* /*
* KVM doesn't support the hybrid PMU yet. * Note, hybrid CPU models get tracked as having hybrid PMUs even when
* Return the common value in global x86_pmu, * all E-cores are disabled via BIOS. When E-cores are disabled, the
* which available for all cores. * base PMU holds the correct number of counters for P-cores.
*/ */
cap->version = x86_pmu.version;
cap->num_counters_gp = x86_pmu.num_counters; cap->num_counters_gp = x86_pmu.num_counters;
cap->num_counters_fixed = x86_pmu.num_counters_fixed; cap->num_counters_fixed = x86_pmu.num_counters_fixed;
cap->bit_width_gp = x86_pmu.cntval_bits; cap->bit_width_gp = x86_pmu.cntval_bits;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册