Iterate over all possible combinations of adaptive PEBS flags, instead of simply testing each flag individually. There are currently only 16 possible combinations, i.e. there's no reason not to exhaustively test every one. Opportunistically rename PEBS_DATACFG_GP to PEBS_DATACFG_GPRS to differentiate it from general purposes *counters*, which KVM also tends to abbreviate as "GP". Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx> --- lib/x86/pmu.h | 6 +++++- x86/pmu_pebs.c | 20 +++++++++----------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/lib/x86/pmu.h b/lib/x86/pmu.h index 8465e3c9..f07fbd93 100644 --- a/lib/x86/pmu.h +++ b/lib/x86/pmu.h @@ -44,9 +44,13 @@ #define GLOBAL_STATUS_BUFFER_OVF BIT_ULL(GLOBAL_STATUS_BUFFER_OVF_BIT) #define PEBS_DATACFG_MEMINFO BIT_ULL(0) -#define PEBS_DATACFG_GP BIT_ULL(1) +#define PEBS_DATACFG_GPRS BIT_ULL(1) #define PEBS_DATACFG_XMMS BIT_ULL(2) #define PEBS_DATACFG_LBRS BIT_ULL(3) +#define PEBS_DATACFG_MASK (PEBS_DATACFG_MEMINFO | \ + PEBS_DATACFG_GPRS | \ + PEBS_DATACFG_XMMS | \ + PEBS_DATACFG_LBRS) #define ICL_EVENTSEL_ADAPTIVE (1ULL << 34) #define PEBS_DATACFG_LBR_SHIFT 24 diff --git a/x86/pmu_pebs.c b/x86/pmu_pebs.c index 050617cd..dff1ed26 100644 --- a/x86/pmu_pebs.c +++ b/x86/pmu_pebs.c @@ -78,13 +78,6 @@ static uint32_t intel_arch_events[] = { 0x412e, /* PERF_COUNT_HW_CACHE_MISSES */ }; -static u64 pebs_data_cfgs[] = { - PEBS_DATACFG_MEMINFO, - PEBS_DATACFG_GP, - PEBS_DATACFG_XMMS, - PEBS_DATACFG_LBRS | ((MAX_NUM_LBR_ENTRY -1) << PEBS_DATACFG_LBR_SHIFT), -}; - /* Iterating each counter value is a waste of time, pick a few typical values. */ static u64 counter_start_values[] = { /* if PEBS counter doesn't overflow at all */ @@ -105,7 +98,7 @@ static unsigned int get_adaptive_pebs_record_size(u64 pebs_data_cfg) if (pebs_data_cfg & PEBS_DATACFG_MEMINFO) sz += sizeof(struct pebs_meminfo); - if (pebs_data_cfg & PEBS_DATACFG_GP) + if (pebs_data_cfg & PEBS_DATACFG_GPRS) sz += sizeof(struct pebs_gprs); if (pebs_data_cfg & PEBS_DATACFG_XMMS) sz += sizeof(struct pebs_xmm); @@ -419,9 +412,14 @@ int main(int ac, char **av) if (!has_baseline) continue; - for (j = 0; j < ARRAY_SIZE(pebs_data_cfgs); j++) { - report_prefix_pushf("Adaptive (0x%lx)", pebs_data_cfgs[j]); - check_pebs_counters(pebs_data_cfgs[j]); + for (j = 0; j <= PEBS_DATACFG_MASK; j++) { + u64 pebs_data_cfg = j; + + if (pebs_data_cfg & PEBS_DATACFG_LBRS) + pebs_data_cfg |= ((MAX_NUM_LBR_ENTRY -1) << PEBS_DATACFG_LBR_SHIFT); + + report_prefix_pushf("Adaptive (0x%lx)", pebs_data_cfg); + check_pebs_counters(pebs_data_cfg); report_prefix_pop(); } } -- 2.44.0.278.ge034bb2e1d-goog