mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
KVM: arm64: Allow userspace to limit the number of PMU counters for EL2 VMs
As long as we had purely EL1 VMs, we could easily update the number of guest-visible counters by letting userspace write to PMCR_EL0.N. With VMs started at EL2, PMCR_EL1.N only reflects MDCR_EL2.HPMN, and we don't have a good way to limit it. For this purpose, introduce a new PMUv3 attribute that allows limiting the maximum number of counters. This requires the explicit selection of a PMU. Suggested-by: Oliver Upton <oliver.upton@linux.dev> Reviewed-by: Oliver Upton <oliver.upton@linux.dev> Signed-off-by: Marc Zyngier <maz@kernel.org>
This commit is contained in:
@@ -137,6 +137,30 @@ exit_reason = KVM_EXIT_FAIL_ENTRY and populate the fail_entry struct by setting
|
||||
hardare_entry_failure_reason field to KVM_EXIT_FAIL_ENTRY_CPU_UNSUPPORTED and
|
||||
the cpu field to the processor id.
|
||||
|
||||
1.5 ATTRIBUTE: KVM_ARM_VCPU_PMU_V3_SET_NR_COUNTERS
|
||||
--------------------------------------------------
|
||||
|
||||
:Parameters: in kvm_device_attr.addr the address to an unsigned int
|
||||
representing the maximum value taken by PMCR_EL0.N
|
||||
|
||||
:Returns:
|
||||
|
||||
======= ====================================================
|
||||
-EBUSY PMUv3 already initialized, a VCPU has already run or
|
||||
an event filter has already been set
|
||||
-EFAULT Error accessing the value pointed to by addr
|
||||
-ENODEV PMUv3 not supported or GIC not initialized
|
||||
-EINVAL No PMUv3 explicitly selected, or value of N out of
|
||||
range
|
||||
======= ====================================================
|
||||
|
||||
Set the number of implemented event counters in the virtual PMU. This
|
||||
mandates that a PMU has explicitly been selected via
|
||||
KVM_ARM_VCPU_PMU_V3_SET_PMU, and will fail when no PMU has been
|
||||
explicitly selected, or the number of counters is out of range for the
|
||||
selected PMU. Selecting a new PMU cancels the effect of setting this
|
||||
attribute.
|
||||
|
||||
2. GROUP: KVM_ARM_VCPU_TIMER_CTRL
|
||||
=================================
|
||||
|
||||
|
||||
Reference in New Issue
Block a user