[PATCH v2 0/8] KVM: arm64: PMU: Allow userspace to limit the number of PMCs on vCPU
Reiji Watanabe
reijiw at google.com
Tue Jan 17 21:53:13 PST 2023
Hi Shaoqin,
> I have tested this patch set on an Ampere machine, and every thing works
> fine.
>
>
> Tested-by: Shaoqin Huang <shahuang at redhat.com>
Thank you for testing the series!
Reiji
>
> On 1/17/23 09:35, Reiji Watanabe wrote:
> > The goal of this series is to allow userspace to limit the number
> > of PMU event counters on the vCPU. We need this to support migration
> > across systems that implement different numbers of counters.
> >
> > The number of PMU event counters is indicated in PMCR_EL0.N.
> > For a vCPU with PMUv3 configured, its value will be the same as
> > the host value by default. Userspace can set PMCR_EL0.N for the
> > vCPU to a lower value than the host value, using KVM_SET_ONE_REG.
> > However, it is practically unsupported, as KVM resets PMCR_EL0.N
> > to the host value on vCPU reset and some KVM code uses the host
> > value to identify (un)implemented event counters on the vCPU.
> >
> > This series will ensure that the PMCR_EL0.N value is preserved
> > on vCPU reset and that KVM doesn't use the host value
> > to identify (un)implemented event counters on the vCPU.
> > This allows userspace to limit the number of the PMU event
> > counters on the vCPU.
> >
> > Patch 1 fixes reset_pmu_reg() to ensure that (RAZ) bits of
> > {PMCNTEN,PMOVS}{SET,CLR}_EL1 corresponding to unimplemented event
> > counters on the vCPU are reset to zero even when PMCR_EL0.N for
> > the vCPU is different from the host.
> >
> > Patch 2 is a minor refactoring to use the default PMU register reset
> > function (reset_pmu_reg()) for PMUSERENR_EL0 and PMCCFILTR_EL0.
> > (With the Patch 1 change, reset_pmu_reg() can now be used for
> > those registers)
> >
> > Patch 3 fixes reset_pmcr() to preserve PMCR_EL0.N for the vCPU on
> > vCPU reset.
> >
> > Patch 4 adds the sys_reg's set_user() handler for the PMCR_EL0
> > to disallow userspace to set PMCR_EL0.N for the vCPU to a value
> > that is greater than the host value.
> >
> > Patch 5-8 adds a selftest to verify reading and writing PMU registers
> > for implemented or unimplemented PMU event counters on the vCPU.
> >
> > The series is based on v6.2-rc4.
> >
> > v2:
> > - Added the sys_reg's set_user() handler for the PMCR_EL0 to
> > disallow userspace to set PMCR_EL0.N for the vCPU to a value
> > that is greater than the host value (and added a new test
> > case for this behavior). [Oliver]
> > - Added to the commit log of the patch 2 that PMUSERENR_EL0 and
> > PMCCFILTR_EL0 have UNKNOWN reset values.
> >
> > v1: https://lore.kernel.org/all/20221230035928.3423990-1-reijiw@google.com/
> >
> > Reiji Watanabe (8):
> > KVM: arm64: PMU: Have reset_pmu_reg() to clear a register
> > KVM: arm64: PMU: Use reset_pmu_reg() for PMUSERENR_EL0 and
> > PMCCFILTR_EL0
> > KVM: arm64: PMU: Preserve vCPU's PMCR_EL0.N value on vCPU reset
> > KVM: arm64: PMU: Disallow userspace to set PMCR.N greater than the
> > host value
> > tools: arm64: Import perf_event.h
> > KVM: selftests: aarch64: Introduce vpmu_counter_access test
> > KVM: selftests: aarch64: vPMU register test for implemented counters
> > KVM: selftests: aarch64: vPMU register test for unimplemented counters
> >
> > arch/arm64/kvm/pmu-emul.c | 6 +
> > arch/arm64/kvm/sys_regs.c | 57 +-
> > tools/arch/arm64/include/asm/perf_event.h | 258 +++++++
> > tools/testing/selftests/kvm/Makefile | 1 +
> > .../kvm/aarch64/vpmu_counter_access.c | 644 ++++++++++++++++++
> > .../selftests/kvm/include/aarch64/processor.h | 1 +
> > 6 files changed, 954 insertions(+), 13 deletions(-)
> > create mode 100644 tools/arch/arm64/include/asm/perf_event.h
> > create mode 100644 tools/testing/selftests/kvm/aarch64/vpmu_counter_access.c
> >
> >
> > base-commit: 5dc4c995db9eb45f6373a956eb1f69460e69e6d4
>
> --
> Regards,
> Shaoqin
>
More information about the linux-arm-kernel
mailing list