Skip to content

Commit 2922b59

Browse files
Dapeng Misean-jc
authored andcommitted
KVM: selftests: Validate more arch-events in pmu_counters_test
Add support for 5 new architectural events (4 topdown level 1 metrics events and LBR inserts event) that will first show up in Intel's Clearwater Forest CPUs. Detailed info about the new events can be found in SDM section 21.2.7 "Pre-defined Architectural Performance Events". Signed-off-by: Dapeng Mi <[email protected]> Tested-by: Yi Lai <[email protected]> [sean: drop "unavailable_mask" changes] Tested-by: Dapeng Mi <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Sean Christopherson <[email protected]>
1 parent 1fcd305 commit 2922b59

4 files changed

Lines changed: 29 additions & 1 deletion

File tree

tools/testing/selftests/kvm/include/x86/pmu.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@
6161
#define INTEL_ARCH_BRANCHES_RETIRED RAW_EVENT(0xc4, 0x00)
6262
#define INTEL_ARCH_BRANCHES_MISPREDICTED RAW_EVENT(0xc5, 0x00)
6363
#define INTEL_ARCH_TOPDOWN_SLOTS RAW_EVENT(0xa4, 0x01)
64+
#define INTEL_ARCH_TOPDOWN_BE_BOUND RAW_EVENT(0xa4, 0x02)
65+
#define INTEL_ARCH_TOPDOWN_BAD_SPEC RAW_EVENT(0x73, 0x00)
66+
#define INTEL_ARCH_TOPDOWN_FE_BOUND RAW_EVENT(0x9c, 0x01)
67+
#define INTEL_ARCH_TOPDOWN_RETIRING RAW_EVENT(0xc2, 0x02)
68+
#define INTEL_ARCH_LBR_INSERTS RAW_EVENT(0xe4, 0x01)
6469

6570
#define AMD_ZEN_CORE_CYCLES RAW_EVENT(0x76, 0x00)
6671
#define AMD_ZEN_INSTRUCTIONS_RETIRED RAW_EVENT(0xc0, 0x00)
@@ -80,6 +85,11 @@ enum intel_pmu_architectural_events {
8085
INTEL_ARCH_BRANCHES_RETIRED_INDEX,
8186
INTEL_ARCH_BRANCHES_MISPREDICTED_INDEX,
8287
INTEL_ARCH_TOPDOWN_SLOTS_INDEX,
88+
INTEL_ARCH_TOPDOWN_BE_BOUND_INDEX,
89+
INTEL_ARCH_TOPDOWN_BAD_SPEC_INDEX,
90+
INTEL_ARCH_TOPDOWN_FE_BOUND_INDEX,
91+
INTEL_ARCH_TOPDOWN_RETIRING_INDEX,
92+
INTEL_ARCH_LBR_INSERTS_INDEX,
8393
NR_INTEL_ARCH_EVENTS,
8494
};
8595

tools/testing/selftests/kvm/include/x86/processor.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ struct kvm_x86_cpu_property {
265265
#define X86_PROPERTY_PMU_NR_GP_COUNTERS KVM_X86_CPU_PROPERTY(0xa, 0, EAX, 8, 15)
266266
#define X86_PROPERTY_PMU_GP_COUNTERS_BIT_WIDTH KVM_X86_CPU_PROPERTY(0xa, 0, EAX, 16, 23)
267267
#define X86_PROPERTY_PMU_EBX_BIT_VECTOR_LENGTH KVM_X86_CPU_PROPERTY(0xa, 0, EAX, 24, 31)
268-
#define X86_PROPERTY_PMU_EVENTS_MASK KVM_X86_CPU_PROPERTY(0xa, 0, EBX, 0, 7)
268+
#define X86_PROPERTY_PMU_EVENTS_MASK KVM_X86_CPU_PROPERTY(0xa, 0, EBX, 0, 12)
269269
#define X86_PROPERTY_PMU_FIXED_COUNTERS_BITMASK KVM_X86_CPU_PROPERTY(0xa, 0, ECX, 0, 31)
270270
#define X86_PROPERTY_PMU_NR_FIXED_COUNTERS KVM_X86_CPU_PROPERTY(0xa, 0, EDX, 0, 4)
271271
#define X86_PROPERTY_PMU_FIXED_COUNTERS_BIT_WIDTH KVM_X86_CPU_PROPERTY(0xa, 0, EDX, 5, 12)
@@ -332,6 +332,11 @@ struct kvm_x86_pmu_feature {
332332
#define X86_PMU_FEATURE_BRANCH_INSNS_RETIRED KVM_X86_PMU_FEATURE(EBX, 5)
333333
#define X86_PMU_FEATURE_BRANCHES_MISPREDICTED KVM_X86_PMU_FEATURE(EBX, 6)
334334
#define X86_PMU_FEATURE_TOPDOWN_SLOTS KVM_X86_PMU_FEATURE(EBX, 7)
335+
#define X86_PMU_FEATURE_TOPDOWN_BE_BOUND KVM_X86_PMU_FEATURE(EBX, 8)
336+
#define X86_PMU_FEATURE_TOPDOWN_BAD_SPEC KVM_X86_PMU_FEATURE(EBX, 9)
337+
#define X86_PMU_FEATURE_TOPDOWN_FE_BOUND KVM_X86_PMU_FEATURE(EBX, 10)
338+
#define X86_PMU_FEATURE_TOPDOWN_RETIRING KVM_X86_PMU_FEATURE(EBX, 11)
339+
#define X86_PMU_FEATURE_LBR_INSERTS KVM_X86_PMU_FEATURE(EBX, 12)
335340

336341
#define X86_PMU_FEATURE_INSNS_RETIRED_FIXED KVM_X86_PMU_FEATURE(ECX, 0)
337342
#define X86_PMU_FEATURE_CPU_CYCLES_FIXED KVM_X86_PMU_FEATURE(ECX, 1)

tools/testing/selftests/kvm/lib/x86/pmu.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ const uint64_t intel_pmu_arch_events[] = {
1919
INTEL_ARCH_BRANCHES_RETIRED,
2020
INTEL_ARCH_BRANCHES_MISPREDICTED,
2121
INTEL_ARCH_TOPDOWN_SLOTS,
22+
INTEL_ARCH_TOPDOWN_BE_BOUND,
23+
INTEL_ARCH_TOPDOWN_BAD_SPEC,
24+
INTEL_ARCH_TOPDOWN_FE_BOUND,
25+
INTEL_ARCH_TOPDOWN_RETIRING,
26+
INTEL_ARCH_LBR_INSERTS,
2227
};
2328
kvm_static_assert(ARRAY_SIZE(intel_pmu_arch_events) == NR_INTEL_ARCH_EVENTS);
2429

tools/testing/selftests/kvm/x86/pmu_counters_test.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,11 @@ static struct kvm_intel_pmu_event intel_event_to_feature(uint8_t idx)
7575
[INTEL_ARCH_BRANCHES_RETIRED_INDEX] = { X86_PMU_FEATURE_BRANCH_INSNS_RETIRED, X86_PMU_FEATURE_NULL },
7676
[INTEL_ARCH_BRANCHES_MISPREDICTED_INDEX] = { X86_PMU_FEATURE_BRANCHES_MISPREDICTED, X86_PMU_FEATURE_NULL },
7777
[INTEL_ARCH_TOPDOWN_SLOTS_INDEX] = { X86_PMU_FEATURE_TOPDOWN_SLOTS, X86_PMU_FEATURE_TOPDOWN_SLOTS_FIXED },
78+
[INTEL_ARCH_TOPDOWN_BE_BOUND_INDEX] = { X86_PMU_FEATURE_TOPDOWN_BE_BOUND, X86_PMU_FEATURE_NULL },
79+
[INTEL_ARCH_TOPDOWN_BAD_SPEC_INDEX] = { X86_PMU_FEATURE_TOPDOWN_BAD_SPEC, X86_PMU_FEATURE_NULL },
80+
[INTEL_ARCH_TOPDOWN_FE_BOUND_INDEX] = { X86_PMU_FEATURE_TOPDOWN_FE_BOUND, X86_PMU_FEATURE_NULL },
81+
[INTEL_ARCH_TOPDOWN_RETIRING_INDEX] = { X86_PMU_FEATURE_TOPDOWN_RETIRING, X86_PMU_FEATURE_NULL },
82+
[INTEL_ARCH_LBR_INSERTS_INDEX] = { X86_PMU_FEATURE_LBR_INSERTS, X86_PMU_FEATURE_NULL },
7883
};
7984

8085
kvm_static_assert(ARRAY_SIZE(__intel_event_to_feature) == NR_INTEL_ARCH_EVENTS);
@@ -171,9 +176,12 @@ static void guest_assert_event_count(uint8_t idx, uint32_t pmc, uint32_t pmc_msr
171176
fallthrough;
172177
case INTEL_ARCH_CPU_CYCLES_INDEX:
173178
case INTEL_ARCH_REFERENCE_CYCLES_INDEX:
179+
case INTEL_ARCH_TOPDOWN_BE_BOUND_INDEX:
180+
case INTEL_ARCH_TOPDOWN_FE_BOUND_INDEX:
174181
GUEST_ASSERT_NE(count, 0);
175182
break;
176183
case INTEL_ARCH_TOPDOWN_SLOTS_INDEX:
184+
case INTEL_ARCH_TOPDOWN_RETIRING_INDEX:
177185
__GUEST_ASSERT(count >= NUM_INSNS_RETIRED,
178186
"Expected top-down slots >= %u, got count = %lu",
179187
NUM_INSNS_RETIRED, count);

0 commit comments

Comments
 (0)