Merge tag 'kvm-arm-for-v4.12' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD
KVM/ARM Changes for v4.12. Changes include: - Using the common sysreg definitions between KVM and arm64 - Improved hyp-stub implementation with support for kexec and kdump on the 32-bit side - Proper PMU exception handling - Performance improvements of our GIC handling - Support for irqchip in userspace with in-kernel arch-timers and PMU support - A fix for a race condition in our PSCI code Conflicts: Documentation/virtual/kvm/api.txt include/uapi/linux/kvm.h
This commit is contained in:
@@ -4120,3 +4120,44 @@ This capability indicates that guest using memory monotoring instructions
|
||||
(MWAIT/MWAITX) to stop the virtual CPU will not cause a VM exit. As such time
|
||||
spent while virtual CPU is halted in this way will then be accounted for as
|
||||
guest running time on the host (as opposed to e.g. HLT).
|
||||
|
||||
8.9 KVM_CAP_ARM_USER_IRQ
|
||||
|
||||
Architectures: arm, arm64
|
||||
This capability, if KVM_CHECK_EXTENSION indicates that it is available, means
|
||||
that if userspace creates a VM without an in-kernel interrupt controller, it
|
||||
will be notified of changes to the output level of in-kernel emulated devices,
|
||||
which can generate virtual interrupts, presented to the VM.
|
||||
For such VMs, on every return to userspace, the kernel
|
||||
updates the vcpu's run->s.regs.device_irq_level field to represent the actual
|
||||
output level of the device.
|
||||
|
||||
Whenever kvm detects a change in the device output level, kvm guarantees at
|
||||
least one return to userspace before running the VM. This exit could either
|
||||
be a KVM_EXIT_INTR or any other exit event, like KVM_EXIT_MMIO. This way,
|
||||
userspace can always sample the device output level and re-compute the state of
|
||||
the userspace interrupt controller. Userspace should always check the state
|
||||
of run->s.regs.device_irq_level on every kvm exit.
|
||||
The value in run->s.regs.device_irq_level can represent both level and edge
|
||||
triggered interrupt signals, depending on the device. Edge triggered interrupt
|
||||
signals will exit to userspace with the bit in run->s.regs.device_irq_level
|
||||
set exactly once per edge signal.
|
||||
|
||||
The field run->s.regs.device_irq_level is available independent of
|
||||
run->kvm_valid_regs or run->kvm_dirty_regs bits.
|
||||
|
||||
If KVM_CAP_ARM_USER_IRQ is supported, the KVM_CHECK_EXTENSION ioctl returns a
|
||||
number larger than 0 indicating the version of this capability is implemented
|
||||
and thereby which bits in in run->s.regs.device_irq_level can signal values.
|
||||
|
||||
Currently the following bits are defined for the device_irq_level bitmap:
|
||||
|
||||
KVM_CAP_ARM_USER_IRQ >= 1:
|
||||
|
||||
KVM_ARM_DEV_EL1_VTIMER - EL1 virtual timer
|
||||
KVM_ARM_DEV_EL1_PTIMER - EL1 physical timer
|
||||
KVM_ARM_DEV_PMU - ARM PMU overflow interrupt signal
|
||||
|
||||
Future versions of kvm may implement additional events. These will get
|
||||
indicated by returning a higher number from KVM_CHECK_EXTENSION and will be
|
||||
listed above.
|
||||
|
Reference in New Issue
Block a user