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:
		
							parent
							
								
									88865beca9
								
							
						
					
					
						commit
						8be86a5eec
					
				| @ -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 | ||||||
| ================================= | ================================= | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user