KVM: arm64: Document PMU filtering API
Add a small blurb describing how the event filtering API gets used. Reviewed-by: Andrew Jones <drjones@redhat.com> Signed-off-by: Marc Zyngier <maz@kernel.org>
This commit is contained in:
@ -55,6 +55,52 @@ Request the initialization of the PMUv3. If using the PMUv3 with an in-kernel
|
|||||||
virtual GIC implementation, this must be done after initializing the in-kernel
|
virtual GIC implementation, this must be done after initializing the in-kernel
|
||||||
irqchip.
|
irqchip.
|
||||||
|
|
||||||
|
1.3 ATTRIBUTE: KVM_ARM_VCPU_PMU_V3_FILTER
|
||||||
|
-----------------------------------------
|
||||||
|
|
||||||
|
:Parameters: in kvm_device_attr.addr the address for a PMU event filter is a
|
||||||
|
pointer to a struct kvm_pmu_event_filter
|
||||||
|
|
||||||
|
:Returns:
|
||||||
|
|
||||||
|
======= ======================================================
|
||||||
|
-ENODEV: PMUv3 not supported or GIC not initialized
|
||||||
|
-ENXIO: PMUv3 not properly configured or in-kernel irqchip not
|
||||||
|
configured as required prior to calling this attribute
|
||||||
|
-EBUSY: PMUv3 already initialized
|
||||||
|
-EINVAL: Invalid filter range
|
||||||
|
======= ======================================================
|
||||||
|
|
||||||
|
Request the installation of a PMU event filter described as follows:
|
||||||
|
|
||||||
|
struct kvm_pmu_event_filter {
|
||||||
|
__u16 base_event;
|
||||||
|
__u16 nevents;
|
||||||
|
|
||||||
|
#define KVM_PMU_EVENT_ALLOW 0
|
||||||
|
#define KVM_PMU_EVENT_DENY 1
|
||||||
|
|
||||||
|
__u8 action;
|
||||||
|
__u8 pad[3];
|
||||||
|
};
|
||||||
|
|
||||||
|
A filter range is defined as the range [@base_event, @base_event + @nevents),
|
||||||
|
together with an @action (KVM_PMU_EVENT_ALLOW or KVM_PMU_EVENT_DENY). The
|
||||||
|
first registered range defines the global policy (global ALLOW if the first
|
||||||
|
@action is DENY, global DENY if the first @action is ALLOW). Multiple ranges
|
||||||
|
can be programmed, and must fit within the event space defined by the PMU
|
||||||
|
architecture (10 bits on ARMv8.0, 16 bits from ARMv8.1 onwards).
|
||||||
|
|
||||||
|
Note: "Cancelling" a filter by registering the opposite action for the same
|
||||||
|
range doesn't change the default action. For example, installing an ALLOW
|
||||||
|
filter for event range [0:10) as the first filter and then applying a DENY
|
||||||
|
action for the same range will leave the whole range as disabled.
|
||||||
|
|
||||||
|
Restrictions: Event 0 (SW_INCR) is never filtered, as it doesn't count a
|
||||||
|
hardware event. Filtering event 0x1E (CHAIN) has no effect either, as it
|
||||||
|
isn't strictly speaking an event. Filtering the cycle counter is possible
|
||||||
|
using event 0x11 (CPU_CYCLES).
|
||||||
|
|
||||||
|
|
||||||
2. GROUP: KVM_ARM_VCPU_TIMER_CTRL
|
2. GROUP: KVM_ARM_VCPU_TIMER_CTRL
|
||||||
=================================
|
=================================
|
||||||
|
Reference in New Issue
Block a user