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 <mdr@ashroe.eu>
Change-Id: I70fec26bb8ca915f4b980963e06c2e43dfde5a23
diff --git a/src/vppinfra/cpu.h b/src/vppinfra/cpu.h
index 50d8b61..329e5cc 100644
--- a/src/vppinfra/cpu.h
+++ b/src/vppinfra/cpu.h
@@ -266,6 +266,24 @@
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 ()
{