Generic vcpu interface
====================================

The virtual cpu "device" also accepts the ioctls KVM_SET_DEVICE_ATTR,
KVM_GET_DEVICE_ATTR, and KVM_HAS_DEVICE_ATTR. The interface uses the same struct
kvm_device_attr as other devices, but targets VCPU-wide settings and controls.

The groups and attributes per virtual cpu, if any, are architecture specific.

1. GROUP: KVM_ARM_VCPU_PMU_V3_CTRL
Architectures: ARM64

1.1. ATTRIBUTE: KVM_ARM_VCPU_PMU_V3_IRQ
Parameters: in kvm_device_attr.addr the address for PMU overflow interrupt is a
            pointer to an int
Returns: -EBUSY: The PMU overflow interrupt is already set
         -ENXIO: The overflow interrupt not set when attempting to get it
         -ENODEV: PMUv3 not supported
         -EINVAL: Invalid PMU overflow interrupt number supplied

A value describing the PMUv3 (Performance Monitor Unit v3) overflow interrupt
number for this vcpu. This interrupt could be a PPI or SPI, but the interrupt
type must be same for each vcpu. As a PPI, the interrupt number is the same for
all vcpus, while as an SPI it must be a separate number per vcpu.

1.2 ATTRIBUTE: KVM_ARM_VCPU_PMU_V3_INIT
Parameters: no additional parameter in kvm_device_attr.addr
Returns: -ENODEV: PMUv3 not supported
         -ENXIO: PMUv3 not properly configured as required prior to calling this
                 attribute
         -EBUSY: PMUv3 already initialized

Request the initialization of the PMUv3.  This must be done after creating the
in-kernel irqchip.  Creating a PMU with a userspace irqchip is currently not
supported.
