Hi Marc, On 9/8/20 9:58 AM, Marc Zyngier wrote: > Add a small blurb describing how the event filtering API gets used. > > Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx> > --- > Documentation/virt/kvm/devices/vcpu.rst | 46 +++++++++++++++++++++++++ > 1 file changed, 46 insertions(+) > > diff --git a/Documentation/virt/kvm/devices/vcpu.rst b/Documentation/virt/kvm/devices/vcpu.rst > index ca374d3fe085..203b91e93151 100644 > --- a/Documentation/virt/kvm/devices/vcpu.rst > +++ b/Documentation/virt/kvm/devices/vcpu.rst > @@ -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 > 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 describe 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). Oh I see here you did comment it in the uapi. Thanks Eric > + > > 2. GROUP: KVM_ARM_VCPU_TIMER_CTRL > ================================= >