This series adds support for AMD's Host-Only (bit 41) and Guest-Only (bit
40) performance counter eventsel bits in KVM's mediated PMU passthrough
implementation.
These bits allow an nSVM-enabled guest to configure performance counters
that count only during L1 execution (Host-Only) or only during L2 execution
(Guest-Only).
KVM tracks which PMCs have Host-Only xor Guest-Only bits set, and updates
the hardware event selector ENABLE bit at the following state transitions:
- EFER.SVME changes: Enable/disable Guest-Only counters
- VMRUN: Disable Host-Only, enable Guest-Only counters
- VMEXIT: Enable Host-Only, disable Guest-Only counters
Jim Mattson (6):
KVM: x86/pmu: Introduce amd_pmu_set_eventsel_hw()
KVM: x86/pmu: Disable HG_ONLY events as appropriate for current vCPU
state
KVM: x86/pmu: Track enabled AMD PMCs with Host-Only xor Guest-Only
bits set
KVM: x86/pmu: [De]activate HG_ONLY PMCs at SVME changes and nested
transitions
KVM: x86/pmu: Allow HG_ONLY bits with nSVM and mediated PMU
KVM: selftests: x86: Add svm_pmu_hg_test for HG_ONLY bits
arch/x86/include/asm/kvm-x86-pmu-ops.h | 1 +
arch/x86/include/asm/kvm_host.h | 4 +
arch/x86/include/asm/perf_event.h | 2 +
arch/x86/kvm/pmu.c | 9 +
arch/x86/kvm/pmu.h | 4 +
arch/x86/kvm/svm/nested.c | 10 +
arch/x86/kvm/svm/pmu.c | 84 ++++-
arch/x86/kvm/svm/svm.c | 3 +
tools/testing/selftests/kvm/Makefile.kvm | 1 +
.../selftests/kvm/x86/svm_pmu_hg_test.c | 297 ++++++++++++++++++
10 files changed, 412 insertions(+), 3 deletions(-)
create mode 100644 tools/testing/selftests/kvm/x86/svm_pmu_hg_test.c
--
2.52.0.457.g6b5491de43-goog