@@ -31,10 +31,11 @@
* 4 - PERF_COUNT_HW_CACHE_MISSES
* 5 - PERF_COUNT_HW_BRANCH_INSTRUCTIONS
* 6 - PERF_COUNT_HW_BRANCH_MISSES
+ * 7 - CPUID-hinted Topdown Slots event (available on gp counter)
*
* the second part of hw_events is defined by the generic kernel perf:
*
- * 7 - PERF_COUNT_HW_REF_CPU_CYCLES
+ * 8 - PERF_COUNT_HW_REF_CPU_CYCLES
*/
static struct kvm_pmu_hw_event intel_arch_events[] = {
[0] = { 0x3c, 0x00 },
@@ -44,12 +45,13 @@ static struct kvm_pmu_hw_event intel_arch_events[] = {
[4] = { 0x2e, 0x41 },
[5] = { 0xc4, 0x00 },
[6] = { 0xc5, 0x00 },
+ [7] = { 0xa4, 0x01 },
/* The above index must match CPUID 0x0A.EBX bit vector */
- [7] = { 0x00, 0x03 },
+ [8] = { 0x00, 0x03 },
};
/* mapping between fixed pmc index and intel_arch_events array */
-static int fixed_pmc_events[] = {1, 0, 7};
+static int fixed_pmc_events[] = {1, 0, 8};
static void reprogram_fixed_counters(struct kvm_pmu *pmu, u64 data)
{
@@ -109,7 +111,7 @@ static bool intel_hw_event_available(struct kvm_pmc *pmc)
continue;
/* disable event that reported as not present by cpuid */
- if ((i < 7) && !(pmu->available_event_types & (1 << i)))
+ if (i < 8 && !(pmu->available_event_types & (1 << i)))
return false;
break;