mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-07 22:34:18 +08:00
perf/x86/amd/core: Detect available counters
If AMD Performance Monitoring Version 2 (PerfMonV2) is supported, use CPUID leaf 0x80000022 EBX to detect the number of Core PMCs. This offers more flexibility if the counts change in later processor families. Signed-off-by: Sandipan Das <sandipan.das@amd.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lkml.kernel.org/r/68a6d9688df189267db26530378870edd34f7b06.1650515382.git.sandipan.das@amd.com
This commit is contained in:
parent
21d59e3e2c
commit
56e026a7ca
@ -1186,6 +1186,7 @@ static const struct attribute_group *amd_attr_update[] = {
|
||||
|
||||
static int __init amd_core_pmu_init(void)
|
||||
{
|
||||
union cpuid_0x80000022_ebx ebx;
|
||||
u64 even_ctr_mask = 0ULL;
|
||||
int i;
|
||||
|
||||
@ -1206,9 +1207,14 @@ static int __init amd_core_pmu_init(void)
|
||||
|
||||
/* Check for Performance Monitoring v2 support */
|
||||
if (boot_cpu_has(X86_FEATURE_PERFMON_V2)) {
|
||||
ebx.full = cpuid_ebx(EXT_PERFMON_DEBUG_FEATURES);
|
||||
|
||||
/* Update PMU version for later usage */
|
||||
x86_pmu.version = 2;
|
||||
|
||||
/* Find the number of available Core PMCs */
|
||||
x86_pmu.num_counters = ebx.split.num_core_pmc;
|
||||
|
||||
amd_pmu_global_cntr_mask = (1ULL << x86_pmu.num_counters) - 1;
|
||||
}
|
||||
|
||||
|
@ -186,6 +186,18 @@ union cpuid28_ecx {
|
||||
unsigned int full;
|
||||
};
|
||||
|
||||
/*
|
||||
* AMD "Extended Performance Monitoring and Debug" CPUID
|
||||
* detection/enumeration details:
|
||||
*/
|
||||
union cpuid_0x80000022_ebx {
|
||||
struct {
|
||||
/* Number of Core Performance Counters */
|
||||
unsigned int num_core_pmc:4;
|
||||
} split;
|
||||
unsigned int full;
|
||||
};
|
||||
|
||||
struct x86_pmu_capability {
|
||||
int version;
|
||||
int num_counters_gp;
|
||||
@ -367,6 +379,11 @@ struct pebs_xmm {
|
||||
u64 xmm[16*2]; /* two entries for each register */
|
||||
};
|
||||
|
||||
/*
|
||||
* AMD Extended Performance Monitoring and Debug cpuid feature detection
|
||||
*/
|
||||
#define EXT_PERFMON_DEBUG_FEATURES 0x80000022
|
||||
|
||||
/*
|
||||
* IBS cpuid feature detection
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user