All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/18] KVM: arm64: Support FEAT_PMUv3 on Apple hardware
@ 2024-12-17 21:20 Oliver Upton
  2024-12-17 21:20 ` [PATCH 01/18] drivers/perf: apple_m1: Refactor event select/filter configuration Oliver Upton
                   ` (20 more replies)
  0 siblings, 21 replies; 27+ messages in thread
From: Oliver Upton @ 2024-12-17 21:20 UTC (permalink / raw)
  To: kvmarm
  Cc: Marc Zyngier, Joey Gouly, Suzuki K Poulose, Zenghui Yu,
	Mingwei Zhang, Colton Lewis, Raghavendra Rao Ananta,
	Catalin Marinas, Will Deacon, Mark Rutland, linux-arm-kernel,
	linux-kernel, Oliver Upton

One of the interesting features of some Apple M* parts is an IMPDEF trap
that routes EL1/EL0 accesses of the PMUv3 registers to EL2. This allows
a hypervisor to emulate an architectural PMUv3 on top of the IMPDEF PMU
hardware present in the CPU.

And if you squint, this _might_ look like a CPU erratum :-)

This series takes advantage of these IMPDEF traps to provide PMUv3 to
KVM guests. As a starting point, only expose the fixed CPU cycle counter
and no event counters. Conveniently, this is enough to get Windows
running as a KVM guest on Apple hardware.

I've tried to keep the deviation to a minimum by refactoring some of the
flows used for PMUv3, e.g. computing PMCEID from the arm_pmu bitmap
instead of reading hardware directly.

RFC -> v1:
 - Rebase to 6.13-rc3
 - Add support for 1 event counter in addition to CPU cycle counter
 - Don't sneak past the PMU event filter (Marc)
 - Have the PMU driver provide a PMUv3 -> HW event ID mapping (Marc)

Tested on my M2 with Linux and Windows guests. If possible, I'd
appreciate someone testing on an M1 as I haven't added those MIDRs to
the erratum yet.

Oliver Upton (18):
  drivers/perf: apple_m1: Refactor event select/filter configuration
  drivers/perf: apple_m1: Support host/guest event filtering
  drivers/perf: apple_m1: Map generic branch events
  drivers/perf: apple_m1: Provide helper for mapping PMUv3 events
  KVM: arm64: Compute PMCEID from arm_pmu's event bitmaps
  KVM: arm64: Always support SW_INCR PMU event
  KVM: arm64: Remap PMUv3 events onto hardware
  KVM: arm64: Use a cpucap to determine if system supports FEAT_PMUv3
  KVM: arm64: Drop kvm_arm_pmu_available static key
  KVM: arm64: Use guard() to cleanup usage of arm_pmus_lock
  KVM: arm64: Move PMUVer filtering into KVM code
  KVM: arm64: Compute synthetic sysreg ESR for Apple PMUv3 traps
  KVM: arm64: Advertise PMUv3 if IMPDEF traps are present
  KVM: arm64: Advertise 0 event counters for IMPDEF PMU
  arm64: Enable IMP DEF PMUv3 traps on Apple M2
  drivers/perf: apple_m1: Map a few more PMUv3 events
  KVM: arm64: Provide 1 event counter on IMPDEF hardware
  KVM: arm64: selftests: Add test for probing PMUv3 sysregs

 arch/arm64/include/asm/apple_m1_pmu.h         |   1 +
 arch/arm64/include/asm/cpufeature.h           |  28 +---
 arch/arm64/kernel/cpu_errata.c                |  38 +++++
 arch/arm64/kernel/cpufeature.c                |  19 +++
 arch/arm64/kernel/image-vars.h                |   5 -
 arch/arm64/kvm/arm.c                          |   4 +-
 arch/arm64/kvm/hyp/include/hyp/switch.h       |   4 +-
 arch/arm64/kvm/hyp/vhe/switch.c               |  22 +++
 arch/arm64/kvm/pmu-emul.c                     | 127 +++++++++++-----
 arch/arm64/kvm/pmu.c                          |  10 +-
 arch/arm64/tools/cpucaps                      |   2 +
 drivers/perf/apple_m1_cpu_pmu.c               | 103 ++++++++++---
 include/kvm/arm_pmu.h                         |  15 +-
 include/linux/perf/arm_pmu.h                  |   1 +
 tools/testing/selftests/kvm/Makefile          |   1 +
 .../kvm/aarch64/pmuv3_register_probe.c        | 135 ++++++++++++++++++
 16 files changed, 407 insertions(+), 108 deletions(-)
 create mode 100644 tools/testing/selftests/kvm/aarch64/pmuv3_register_probe.c


base-commit: 78d4f34e2115b517bcbfe7ec0d018bbbb6f9b0b8
-- 
2.39.5


^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2025-01-10 16:23 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-17 21:20 [PATCH 00/18] KVM: arm64: Support FEAT_PMUv3 on Apple hardware Oliver Upton
2024-12-17 21:20 ` [PATCH 01/18] drivers/perf: apple_m1: Refactor event select/filter configuration Oliver Upton
2024-12-17 21:20 ` [PATCH 02/18] drivers/perf: apple_m1: Support host/guest event filtering Oliver Upton
2024-12-17 21:20 ` [PATCH 03/18] drivers/perf: apple_m1: Map generic branch events Oliver Upton
2024-12-17 21:20 ` [PATCH 04/18] drivers/perf: apple_m1: Provide helper for mapping PMUv3 events Oliver Upton
2024-12-17 21:20 ` [PATCH 05/18] KVM: arm64: Compute PMCEID from arm_pmu's event bitmaps Oliver Upton
2024-12-17 21:20 ` [PATCH 06/18] KVM: arm64: Always support SW_INCR PMU event Oliver Upton
2024-12-17 21:20 ` [PATCH 07/18] KVM: arm64: Remap PMUv3 events onto hardware Oliver Upton
2024-12-17 21:20 ` [PATCH 08/18] KVM: arm64: Use a cpucap to determine if system supports FEAT_PMUv3 Oliver Upton
2024-12-17 21:20 ` [PATCH 09/18] KVM: arm64: Drop kvm_arm_pmu_available static key Oliver Upton
2024-12-18 23:23   ` kernel test robot
2024-12-17 21:20 ` [PATCH 10/18] KVM: arm64: Use guard() to cleanup usage of arm_pmus_lock Oliver Upton
2024-12-17 21:20 ` [PATCH 11/18] KVM: arm64: Move PMUVer filtering into KVM code Oliver Upton
2024-12-17 21:20 ` [PATCH 12/18] KVM: arm64: Compute synthetic sysreg ESR for Apple PMUv3 traps Oliver Upton
2024-12-17 21:20 ` [PATCH 13/18] KVM: arm64: Advertise PMUv3 if IMPDEF traps are present Oliver Upton
2024-12-17 21:22 ` [PATCH 14/18] KVM: arm64: Advertise 0 event counters for IMPDEF PMU Oliver Upton
2024-12-17 21:22 ` [PATCH 15/18] arm64: Enable IMP DEF PMUv3 traps on Apple M2 Oliver Upton
2024-12-17 21:23 ` [RFC PATCH 16/18] drivers/perf: apple_m1: Map a few more PMUv3 events Oliver Upton
2024-12-17 21:23 ` [RFC PATCH 17/18] KVM: arm64: Provide 1 event counter on IMPDEF hardware Oliver Upton
2024-12-17 21:23 ` [HACK PATCH 18/18] KVM: arm64: selftests: Add test for probing PMUv3 sysregs Oliver Upton
2024-12-21 13:45 ` [PATCH 00/18] KVM: arm64: Support FEAT_PMUv3 on Apple hardware Janne Grunau
2024-12-21 22:00   ` Oliver Upton
2025-01-08 12:38 ` Will Deacon
2025-01-08 20:14   ` Oliver Upton
2025-01-08 21:26     ` Marc Zyngier
2025-01-08 23:06       ` [PATCH 00/18] KVM: arm64: Support FEAT_PMUv3 on Apple hardware\ Oliver Upton
2025-01-10 16:22 ` [PATCH 00/18] KVM: arm64: Support FEAT_PMUv3 on Apple hardware Will Deacon

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.