From 0024e53ad048ff0a3cb34bd95679606c11a7154b Mon Sep 17 00:00:00 2001 From: Ray Kinsella Date: Fri, 26 Nov 2021 14:57:35 +0000 Subject: perfmon: prune bundles by available pmu counters Prune perfmon bundles that exceed the number of available pmu counters. Type: improvement Signed-off-by: Ray Kinsella Change-Id: I70fec26bb8ca915f4b980963e06c2e43dfde5a23 --- src/vppinfra/cpu.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/vppinfra/cpu.h') diff --git a/src/vppinfra/cpu.h b/src/vppinfra/cpu.h index 50d8b61cab3..329e5cc298d 100644 --- a/src/vppinfra/cpu.h +++ b/src/vppinfra/cpu.h @@ -266,6 +266,24 @@ clib_cpu_march_priority_hsw () return -1; } +#define X86_CPU_ARCH_PERF_FUNC 0xA + +static inline int +clib_get_pmu_counter_count (u8 *fixed, u8 *general) +{ +#if defined(__x86_64__) + u32 __clib_unused eax = 0, ebx = 0, ecx = 0, edx = 0; + clib_get_cpuid (X86_CPU_ARCH_PERF_FUNC, &eax, &ebx, &ecx, &edx); + + *general = (eax & 0xFF00) >> 8; + *fixed = (edx & 0xF); + + return 1; +#else + return 0; +#endif +} + static inline u32 clib_cpu_implementer () { -- cgit 1.2.3-korg