1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- 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 or
- trying to set the IRQ number without using an in-kernel
- irqchip.
- 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 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
- 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.
- 2. GROUP: KVM_ARM_VCPU_TIMER_CTRL
- Architectures: ARM,ARM64
- 2.1. ATTRIBUTE: KVM_ARM_VCPU_TIMER_IRQ_VTIMER
- 2.2. ATTRIBUTE: KVM_ARM_VCPU_TIMER_IRQ_PTIMER
- Parameters: in kvm_device_attr.addr the address for the timer interrupt is a
- pointer to an int
- Returns: -EINVAL: Invalid timer interrupt number
- -EBUSY: One or more VCPUs has already run
- A value describing the architected timer interrupt number when connected to an
- in-kernel virtual GIC. These must be a PPI (16 <= intid < 32). Setting the
- attribute overrides the default values (see below).
- KVM_ARM_VCPU_TIMER_IRQ_VTIMER: The EL1 virtual timer intid (default: 27)
- KVM_ARM_VCPU_TIMER_IRQ_PTIMER: The EL1 physical timer intid (default: 30)
- Setting the same PPI for different timers will prevent the VCPUs from running.
- Setting the interrupt number on a VCPU configures all VCPUs created at that
- time to use the number provided for a given timer, overwriting any previously
- configured values on other VCPUs. Userspace should configure the interrupt
- numbers on at least one VCPU after creating all VCPUs and before running any
- VCPUs.
|