mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	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
					
				
					 1 changed files with 46 additions and 0 deletions
				
			
		| 
						 | 
					@ -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 a new issue