Skip to content

Commit 33ef141

Browse files
suomilewissean-jc
authored andcommitted
KVM: selftests: Add a common helper for the PMU event filter guest code
Split out the common parts of the Intel and AMD guest code in the PMU event filter test into a helper function. This is in preparation for adding additional counters to the test. No functional changes intended. Signed-off-by: Aaron Lewis <aaronlewis@google.com> Link: https://lore.kernel.org/r/20230407233254.957013-2-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
1 parent dfdeda6 commit 33ef141

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,15 @@ static void check_msr(uint32_t msr, uint64_t bits_to_flip)
100100
GUEST_SYNC(0);
101101
}
102102

103+
static uint64_t run_and_measure_loop(uint32_t msr_base)
104+
{
105+
uint64_t branches_retired = rdmsr(msr_base + 0);
106+
107+
__asm__ __volatile__("loop ." : "+c"((int){NUM_BRANCHES}));
108+
109+
return rdmsr(msr_base + 0) - branches_retired;
110+
}
111+
103112
static void intel_guest_code(void)
104113
{
105114
check_msr(MSR_CORE_PERF_GLOBAL_CTRL, 1);
@@ -108,16 +117,15 @@ static void intel_guest_code(void)
108117
GUEST_SYNC(1);
109118

110119
for (;;) {
111-
uint64_t br0, br1;
120+
uint64_t count;
112121

113122
wrmsr(MSR_CORE_PERF_GLOBAL_CTRL, 0);
114123
wrmsr(MSR_P6_EVNTSEL0, ARCH_PERFMON_EVENTSEL_ENABLE |
115124
ARCH_PERFMON_EVENTSEL_OS | INTEL_BR_RETIRED);
116-
wrmsr(MSR_CORE_PERF_GLOBAL_CTRL, 1);
117-
br0 = rdmsr(MSR_IA32_PMC0);
118-
__asm__ __volatile__("loop ." : "+c"((int){NUM_BRANCHES}));
119-
br1 = rdmsr(MSR_IA32_PMC0);
120-
GUEST_SYNC(br1 - br0);
125+
wrmsr(MSR_CORE_PERF_GLOBAL_CTRL, 0x1);
126+
127+
count = run_and_measure_loop(MSR_IA32_PMC0);
128+
GUEST_SYNC(count);
121129
}
122130
}
123131

@@ -133,15 +141,14 @@ static void amd_guest_code(void)
133141
GUEST_SYNC(1);
134142

135143
for (;;) {
136-
uint64_t br0, br1;
144+
uint64_t count;
137145

138146
wrmsr(MSR_K7_EVNTSEL0, 0);
139147
wrmsr(MSR_K7_EVNTSEL0, ARCH_PERFMON_EVENTSEL_ENABLE |
140148
ARCH_PERFMON_EVENTSEL_OS | AMD_ZEN_BR_RETIRED);
141-
br0 = rdmsr(MSR_K7_PERFCTR0);
142-
__asm__ __volatile__("loop ." : "+c"((int){NUM_BRANCHES}));
143-
br1 = rdmsr(MSR_K7_PERFCTR0);
144-
GUEST_SYNC(br1 - br0);
149+
150+
count = run_and_measure_loop(MSR_K7_PERFCTR0);
151+
GUEST_SYNC(count);
145152
}
146153
}
147154

0 commit comments

Comments
 (0)