[PATCH v7 00/17] KVM: x86/pmu: Add support for AMD Host-Only/Guest-Only bits

Yosry Ahmed posted 17 patches 1 week, 4 days ago
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
[PATCH v7 00/17] KVM: x86/pmu: Add support for AMD Host-Only/Guest-Only bits
Posted by Yosry Ahmed 1 week, 4 days ago
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
-- 
2.54.0.794.g4f17f83d09-goog
Re: [PATCH v7 00/17] KVM: x86/pmu: Add support for AMD Host-Only/Guest-Only bits
Posted by Mi, Dapeng 1 week, 4 days ago
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
Re: [PATCH v7 00/17] KVM: x86/pmu: Add support for AMD Host-Only/Guest-Only bits
Posted by Yosry Ahmed 1 week, 3 days ago
On Thu, May 28, 2026 at 1:30 AM Mi, Dapeng <dapeng1.mi@linux.intel.com> wrote:
>
> 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.

Thank you for checking!
Re: [PATCH v7 00/17] KVM: x86/pmu: Add support for AMD Host-Only/Guest-Only bits
Posted by Sean Christopherson 1 week, 4 days ago
On Wed, May 27, 2026, Yosry Ahmed wrote:
> 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

This all looks good.  I'll get the KVM changes applied and pushed (assuming they
pass testing).

For the selftests, I'm going to hold off on applying them until after the initial
pull requests for 7.2 are merged into Paolo's tree.  The (AWESOME!!!) L2 stack
changes are going to cause conflict hell, and it's easy enough for me to carry
them out of tree for a few weeks.

I'll send a refreshed version of the selftest once kvm-x86 has settled down for
7.2, e.g. to account for the gpat test as well.
Re: [PATCH v7 00/17] KVM: x86/pmu: Add support for AMD Host-Only/Guest-Only bits
Posted by Yosry Ahmed 1 week, 3 days ago
On Wed, May 27, 2026 at 7:28 PM Sean Christopherson <seanjc@google.com> wrote:
>
> On Wed, May 27, 2026, Yosry Ahmed wrote:
> > 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
>
> This all looks good.  I'll get the KVM changes applied and pushed (assuming they
> pass testing).
>
> For the selftests, I'm going to hold off on applying them until after the initial
> pull requests for 7.2 are merged into Paolo's tree.  The (AWESOME!!!) L2 stack
> changes are going to cause conflict hell, and it's easy enough for me to carry
> them out of tree for a few weeks.
>
> I'll send a refreshed version of the selftest once kvm-x86 has settled down for
> 7.2, e.g. to account for the gpat test as well.

So do you plan on getting it merged later in the 7.2 merge window or
for 7.3? I think the former but I am not quite sure.
Re: [PATCH v7 00/17] KVM: x86/pmu: Add support for AMD Host-Only/Guest-Only bits
Posted by Sean Christopherson 1 week, 3 days ago
On Thu, May 28, 2026, Yosry Ahmed wrote:
> On Wed, May 27, 2026 at 7:28 PM Sean Christopherson <seanjc@google.com> wrote:
> >
> > On Wed, May 27, 2026, Yosry Ahmed wrote:
> > > 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
> >
> > This all looks good.  I'll get the KVM changes applied and pushed (assuming they
> > pass testing).
> >
> > For the selftests, I'm going to hold off on applying them until after the initial
> > pull requests for 7.2 are merged into Paolo's tree.  The (AWESOME!!!) L2 stack
> > changes are going to cause conflict hell, and it's easy enough for me to carry
> > them out of tree for a few weeks.
> >
> > I'll send a refreshed version of the selftest once kvm-x86 has settled down for
> > 7.2, e.g. to account for the gpat test as well.
> 
> So do you plan on getting it merged later in the 7.2 merge window or
> for 7.3? I think the former but I am not quite sure.

Ideally, later in the 7.2 merge window.  Worst case scenario, super duper early
in kvm/next for 7.3, so that developers (and me) can build on the functionality.
Re: [PATCH v7 00/17] KVM: x86/pmu: Add support for AMD Host-Only/Guest-Only bits
Posted by Sean Christopherson 1 week, 2 days ago
On Wed, 27 May 2026 23:46:54 +0000, 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).
> 
> [...]

Applied the KVM changes to kvm-x86 svm.  Please yell at me if you haven't seen
new versions of the selftests after the 7.2 merge window has opened (assuming
Paolo and I are somewhat on top of things and actually get the KVM x86 pull
requests merged _before_ Linus opens the window).

[01/17] KVM: nSVM: Stop leaking single-stepping on VMRUN into L2
        https://github.com/kvm-x86/linux/commit/8862376260c4
[02/17] KVM: nSVM: Bail early out of VMRUN emulation if advancing RIP fails
        https://github.com/kvm-x86/linux/commit/42ff88db18a5
[03/17] KVM: nSVM: Unify RIP and PMU handling calls when emulating VMRUN
        https://github.com/kvm-x86/linux/commit/0a35c2a051f3
[04/17] KVM: nSVM: Move VMRUN instruction retirement after entering guest mode
        https://github.com/kvm-x86/linux/commit/9be579d22651
[05/17] KVM: x86: Move enable_pmu/enable_mediated_pmu to pmu.h and pmu.c
        https://github.com/kvm-x86/linux/commit/277eb65b6cc3
[06/17] KVM: x86/pmu: Rename reprogram_counters() to clarify usage
        https://github.com/kvm-x86/linux/commit/103cd7deda58
[07/17] KVM: x86/pmu: Do a single atomic OR when reprogramming counters
        https://github.com/kvm-x86/linux/commit/e48810e06f45
[08/17] KVM: x86/pmu: Check mediated PMU counter enablement before event filters
        https://github.com/kvm-x86/linux/commit/232eadc3110b
[09/17] KVM: x86/pmu: Add support for KVM_X86_PMU_OP_OPTIONAL_RET0
        https://github.com/kvm-x86/linux/commit/f98ef41a5af4
[10/17] KVM: x86/pmu: Disable counters based on Host-Only/Guest-Only bits in SVM
        https://github.com/kvm-x86/linux/commit/2ed72677a5c1
[11/17] KVM: x86/pmu: Track mediated PMU counters with mode-specific enables
        https://github.com/kvm-x86/linux/commit/c0d4c9c54c25
[12/17] KVM: x86/pmu: Reprogram Host/Guest-Only counters on nested transitions
        https://github.com/kvm-x86/linux/commit/a02a25a65246
[13/17] KVM: x86/pmu: Allow Host-Only/Guest-Only bits with nSVM and mediated PMU
        https://github.com/kvm-x86/linux/commit/f4805dcf2d21

--
https://github.com/kvm-x86/linux/tree/next