From: "Mi, Dapeng" <dapeng1.mi@linux.intel.com>
To: Yosry Ahmed <yosry@kernel.org>, Sean Christopherson <seanjc@google.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Jim Mattson <jmattson@google.com>,
Sandipan Das <sandipan.das@amd.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v7 00/17] KVM: x86/pmu: Add support for AMD Host-Only/Guest-Only bits
Date: Thu, 28 May 2026 16:30:24 +0800 [thread overview]
Message-ID: <a2b2cbc1-c293-4e1b-ba8f-8f18c952e82f@linux.intel.com> (raw)
In-Reply-To: <20260527234711.4175166-1-yosry@kernel.org>
Run below KVM PMU selftests on SPR for both mediated vPMU and legacy
emulated vPMU modes, no issue is found.
- pmu_counters_test
- pmu_event_filter_test
- vmx_pmu_caps_test
I know the patches have been merged, so just post the test results here.
Thanks.
On 5/28/2026 7:46 AM, Yosry Ahmed wrote:
> v7 of Jim and myself's series adding support for AMD's Host-Only and
> Guest-Only performance counter eventsel bits in KVM's mediated PMU
> passthrough implementation. The series keeps growing in size over
> versions. This is Sean's fault (as usual), as he keeps finding subtle
> problems and making excellent suggestions.
>
> 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 updates the hardware event selector ENABLE bit at nested transitions
> and EFER.SVME changes such that counters only count in the appropriate
> mode.
>
> The series grew significantly after v4, as it now includes semi-related
> nSVM fixups and selftests cleanups needed for the series. I think parts
> of this series can land independently (patches 1-8 and patches 14-16),
> but then the remaining series would depend on both.
>
> v6 -> v7:
> - Instead of creating __kvm_skip_emulated_instruction(), call
> svm_skip_emulated_instruction() directly when emulating VMRUN [Sean].
> - Split bailing early on failed VMRUN into two patches, one for the
> actual fix (patch 2) and one for the code cleanup (patch 3).
> - Add a Fixes tag for patch 3.
> - Indentation fixes and changelog updates.
>
> v5 -> v6:
> - Use a per-counter PMU callback that is called from
> pmc_is_locally_enabled(), rather than a single callback for all
> counters from kvm_pmu_handle_event(). This is mainly to address the
> problem Sashiko found where kvm_pmu_recalc_pmc_emulation() does not
> capture counter disablement due to Host-Only/Guest-Only bits [Sean].
> - Move the bitmap tracking counters using Host-Only/Guest-Only bits from
> SVM code to the generic PMU code (and in its own patch), as it's now a
> generic optimization for pmc_is_locally_enabled() that is reused by SVM
> code on nested transitions [Sean].
>
> v4 -> v5:
> - Dropped moving leave_guest_mode() and enter_guest_mode() definitions,
> since the calls to update the vPMU no longer happen within these
> functions.
> - Add PMU helpers refactoring to facilitate SVM usage.
> - Added nested SVM fixups to count VMRUN correctly in guest mode when
> Host-Only/Guest-Only support is enabled [Jim/Sean].
> - Update the vPMU synchronously on nested VM-Enter/VM-Exit and EFER.SVME
> changes, such that counter enablement is reevaluated before the
> instructions are counted, as the vPMU counts based on the vCPU state
> at instruction retirement (e.g. using new EFER value when EFER.SVME
> changes) [Jim/Sean].
> - Keep deferring vPMU updates using KVM_REQ_PMU in the
> svm_leave_nested() path to avoid KVM potentially consuming stale
> state [Sean].
> - Use a single PMU callback for reprogramming counters instead of a
> per-counter callback [Sean].
> - Move the bitmap tracking counters into SVM code. The generic vPMU code
> now only exposes an API to reprogram counters, and an SVM wrapper uses
> it on nested transitions [Sean].
> - Drop the manual stack-alignment fixes in the vPMU selftest, instead
> rework L2 stack setup in all nested selftests to reuse the allocation
> and alignment logic used by L1, and completely drop L1-provided stacks
> for L2 [Sean].
>
> v6: https://lore.kernel.org/kvm/20260506015733.1671124-1-yosry@kernel.org/
> v5: https://lore.kernel.org/kvm/20260430202750.3924147-1-yosry@kernel.org/
> v4: https://lore.kernel.org/kvm/20260326031150.3774017-1-yosry@kernel.org/
>
>
> Jim Mattson (2):
> KVM: x86/pmu: Allow Host-Only/Guest-Only bits with nSVM and mediated
> PMU
> KVM: selftests: Add svm_pmu_host_guest_test for Host-Only/Guest-Only
> bits
>
> Yosry Ahmed (15):
> KVM: nSVM: Stop leaking single-stepping on VMRUN into L2
> KVM: nSVM: Bail early out of VMRUN emulation if advancing RIP fails
> KVM: nSVM: Unify RIP and PMU handling calls when emulating VMRUN
> KVM: nSVM: Move VMRUN instruction retirement after entering guest mode
> KVM: x86: Move enable_pmu/enable_mediated_pmu to pmu.h and pmu.c
> KVM: x86/pmu: Rename reprogram_counters() to clarify usage
> KVM: x86/pmu: Do a single atomic OR when reprogramming counters
> KVM: x86/pmu: Check mediated PMU counter enablement before event
> filters
> KVM: x86/pmu: Add support for KVM_X86_PMU_OP_OPTIONAL_RET0
> KVM: x86/pmu: Disable counters based on Host-Only/Guest-Only bits in
> SVM
> KVM: x86/pmu: Track mediated PMU counters with mode-specific enables
> KVM: x86/pmu: Reprogram Host/Guest-Only counters on nested transitions
> KVM: selftests: Refactor allocating guest stack into a helper
> KVM: selftests: Allocate a dedicated guest page for x86 L2 guest stack
> KVM: selftests: Drop L1-provided stacks for L2 guests on x86
>
> arch/x86/include/asm/kvm-x86-pmu-ops.h | 5 +-
> arch/x86/include/asm/kvm_host.h | 3 +-
> arch/x86/include/asm/perf_event.h | 2 +
> arch/x86/kvm/pmu.c | 21 +-
> arch/x86/kvm/pmu.h | 44 +++-
> arch/x86/kvm/svm/nested.c | 43 +++-
> arch/x86/kvm/svm/pmu.c | 42 ++++
> arch/x86/kvm/svm/svm.c | 3 +-
> arch/x86/kvm/svm/svm.h | 24 ++
> arch/x86/kvm/vmx/pmu_intel.c | 2 +-
> arch/x86/kvm/x86.c | 9 -
> arch/x86/kvm/x86.h | 3 -
> tools/testing/selftests/kvm/Makefile.kvm | 1 +
> tools/testing/selftests/kvm/include/x86/pmu.h | 6 +
> .../selftests/kvm/include/x86/processor.h | 2 +
> .../selftests/kvm/include/x86/svm_util.h | 5 +-
> tools/testing/selftests/kvm/include/x86/vmx.h | 4 +-
> .../testing/selftests/kvm/lib/x86/memstress.c | 19 +-
> .../testing/selftests/kvm/lib/x86/processor.c | 45 ++--
> tools/testing/selftests/kvm/lib/x86/svm.c | 6 +-
> tools/testing/selftests/kvm/lib/x86/vmx.c | 6 +-
> .../selftests/kvm/x86/aperfmperf_test.c | 9 +-
> .../kvm/x86/evmcs_smm_controls_test.c | 5 +-
> .../testing/selftests/kvm/x86/hyperv_evmcs.c | 6 +-
> .../selftests/kvm/x86/hyperv_svm_test.c | 6 +-
> .../selftests/kvm/x86/kvm_buslock_test.c | 9 +-
> .../selftests/kvm/x86/nested_close_kvm_test.c | 12 +-
> .../selftests/kvm/x86/nested_dirty_log_test.c | 8 +-
> .../selftests/kvm/x86/nested_emulation_test.c | 4 +-
> .../kvm/x86/nested_exceptions_test.c | 9 +-
> .../kvm/x86/nested_invalid_cr3_test.c | 10 +-
> .../selftests/kvm/x86/nested_tdp_fault_test.c | 9 +-
> .../kvm/x86/nested_tsc_adjust_test.c | 10 +-
> .../kvm/x86/nested_tsc_scaling_test.c | 10 +-
> .../kvm/x86/nested_vmsave_vmload_test.c | 6 +-
> tools/testing/selftests/kvm/x86/smm_test.c | 8 +-
> tools/testing/selftests/kvm/x86/state_test.c | 11 +-
> .../selftests/kvm/x86/svm_int_ctl_test.c | 5 +-
> .../selftests/kvm/x86/svm_lbr_nested_state.c | 6 +-
> .../kvm/x86/svm_nested_clear_efer_svme.c | 7 +-
> .../kvm/x86/svm_nested_shutdown_test.c | 5 +-
> .../kvm/x86/svm_nested_soft_inject_test.c | 6 +-
> .../selftests/kvm/x86/svm_nested_vmcb12_gpa.c | 13 +-
> .../kvm/x86/svm_pmu_host_guest_test.c | 216 ++++++++++++++++++
> .../selftests/kvm/x86/svm_vmcall_test.c | 5 +-
> .../kvm/x86/triple_fault_event_test.c | 9 +-
> .../selftests/kvm/x86/vmx_apic_access_test.c | 5 +-
> .../kvm/x86/vmx_apicv_updates_test.c | 4 +-
> .../kvm/x86/vmx_invalid_nested_guest_state.c | 6 +-
> .../kvm/x86/vmx_nested_la57_state_test.c | 5 +-
> .../kvm/x86/vmx_preemption_timer_test.c | 5 +-
> 51 files changed, 479 insertions(+), 245 deletions(-)
> create mode 100644 tools/testing/selftests/kvm/x86/svm_pmu_host_guest_test.c
>
>
> base-commit: 9f2a49c511cb05b85745e1578e4fd425bff87f58
next prev parent reply other threads:[~2026-05-28 8:30 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-27 23:46 [PATCH v7 00/17] KVM: x86/pmu: Add support for AMD Host-Only/Guest-Only bits Yosry Ahmed
2026-05-27 23:46 ` [PATCH v7 01/17] KVM: nSVM: Stop leaking single-stepping on VMRUN into L2 Yosry Ahmed
2026-05-27 23:46 ` [PATCH v7 02/17] KVM: nSVM: Bail early out of VMRUN emulation if advancing RIP fails Yosry Ahmed
2026-05-27 23:46 ` [PATCH v7 03/17] KVM: nSVM: Unify RIP and PMU handling calls when emulating VMRUN Yosry Ahmed
2026-05-27 23:46 ` [PATCH v7 04/17] KVM: nSVM: Move VMRUN instruction retirement after entering guest mode Yosry Ahmed
2026-05-27 23:46 ` [PATCH v7 05/17] KVM: x86: Move enable_pmu/enable_mediated_pmu to pmu.h and pmu.c Yosry Ahmed
2026-05-27 23:47 ` [PATCH v7 06/17] KVM: x86/pmu: Rename reprogram_counters() to clarify usage Yosry Ahmed
2026-05-27 23:47 ` [PATCH v7 07/17] KVM: x86/pmu: Do a single atomic OR when reprogramming counters Yosry Ahmed
2026-05-27 23:47 ` [PATCH v7 08/17] KVM: x86/pmu: Check mediated PMU counter enablement before event filters Yosry Ahmed
2026-05-27 23:47 ` [PATCH v7 09/17] KVM: x86/pmu: Add support for KVM_X86_PMU_OP_OPTIONAL_RET0 Yosry Ahmed
2026-05-27 23:47 ` [PATCH v7 10/17] KVM: x86/pmu: Disable counters based on Host-Only/Guest-Only bits in SVM Yosry Ahmed
2026-05-27 23:47 ` [PATCH v7 11/17] KVM: x86/pmu: Track mediated PMU counters with mode-specific enables Yosry Ahmed
2026-05-27 23:47 ` [PATCH v7 12/17] KVM: x86/pmu: Reprogram Host/Guest-Only counters on nested transitions Yosry Ahmed
2026-05-27 23:47 ` [PATCH v7 13/17] KVM: x86/pmu: Allow Host-Only/Guest-Only bits with nSVM and mediated PMU Yosry Ahmed
2026-05-27 23:47 ` [PATCH v7 14/17] KVM: selftests: Refactor allocating guest stack into a helper Yosry Ahmed
2026-05-27 23:47 ` [PATCH v7 15/17] KVM: selftests: Allocate a dedicated guest page for x86 L2 guest stack Yosry Ahmed
2026-05-28 2:56 ` Sean Christopherson
2026-05-28 17:58 ` Yosry Ahmed
2026-05-28 18:01 ` Sean Christopherson
2026-05-28 18:03 ` Yosry Ahmed
2026-05-27 23:47 ` [PATCH v7 16/17] KVM: selftests: Drop L1-provided stacks for L2 guests on x86 Yosry Ahmed
2026-05-27 23:47 ` [PATCH v7 17/17] KVM: selftests: Add svm_pmu_host_guest_test for Host-Only/Guest-Only bits Yosry Ahmed
2026-05-28 2:25 ` Sean Christopherson
2026-05-28 18:01 ` Yosry Ahmed
2026-05-28 18:04 ` Sean Christopherson
2026-05-28 18:15 ` Jim Mattson
2026-05-28 2:27 ` [PATCH v7 00/17] KVM: x86/pmu: Add support for AMD " Sean Christopherson
2026-05-28 18:02 ` Yosry Ahmed
2026-05-28 18:05 ` Sean Christopherson
2026-05-28 8:30 ` Mi, Dapeng [this message]
2026-05-28 18:01 ` Yosry Ahmed
2026-05-29 22:47 ` Sean Christopherson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a2b2cbc1-c293-4e1b-ba8f-8f18c952e82f@linux.intel.com \
--to=dapeng1.mi@linux.intel.com \
--cc=acme@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=jmattson@google.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=sandipan.das@amd.com \
--cc=seanjc@google.com \
--cc=yosry@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox