linux/virt/kvm/arm/vgic
Marc Zyngier 67b5b673ad KVM: arm/arm64: vgic: Disallow Active+Pending for level interrupts
It was recently reported that VFIO mediated devices, and anything
that VFIO exposes as level interrupts, do no strictly follow the
expected logic of such interrupts as it only lowers the input
line when the guest has EOId the interrupt at the GIC level, rather
than when it Acked the interrupt at the device level.

THe GIC's Active+Pending state is fundamentally incompatible with
this behaviour, as it prevents KVM from observing the EOI, and in
turn results in VFIO never dropping the line. This results in an
interrupt storm in the guest, which it really never expected.

As we cannot really change VFIO to follow the strict rules of level
signalling, let's forbid the A+P state altogether, as it is in the
end only an optimization. It ensures that we will transition via
an invalid state, which we can use to notify VFIO of the EOI.

Reviewed-by: Eric Auger <eric.auger@redhat.com>
Tested-by: Eric Auger <eric.auger@redhat.com>
Tested-by: Shunyong Yang <shunyong.yang@hxt-semitech.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
2018-03-26 10:54:23 +01:00
..
trace.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
vgic-debug.c KVM: arm/arm64: vgic: constify seq_operations and file_operations 2017-09-05 17:33:38 +02:00
vgic-init.c KVM: arm/arm64: Keep GICv2 HYP VAs in kvm_vgic_global_state 2018-03-19 13:04:06 +00:00
vgic-irqfd.c KVM: arm/arm64: vgic-irqfd: Fix MSI entry allocation 2017-11-29 16:46:12 +01:00
vgic-its.c KVM: arm: Use PTR_ERR_OR_ZERO() 2018-01-02 10:05:45 +01:00
vgic-kvm-device.c KVM: arm/arm64: Register iodevs when setting redist base and creating VCPUs 2017-05-09 12:19:36 +02:00
vgic-mmio-v2.c KVM: arm/arm64: Support calling vgic_update_irq_pending from irq context 2017-11-06 16:23:10 +01:00
vgic-mmio-v3.c KVM: arm/arm64: GICv4: Add property field and per-VM predicate 2017-11-10 09:06:45 +01:00
vgic-mmio.c KVM: arm/arm64: vgic: Add missing irq_lock to vgic_mmio_read_pending 2018-03-14 18:28:41 +00:00
vgic-mmio.h KVM: arm/arm64: Separate guest and uaccess writes to dist {sc}active 2017-05-23 12:48:11 +02:00
vgic-v2.c KVM: arm/arm64: vgic: Disallow Active+Pending for level interrupts 2018-03-26 10:54:23 +01:00
vgic-v3.c KVM: arm/arm64: vgic: Disallow Active+Pending for level interrupts 2018-03-26 10:54:23 +01:00
vgic-v4.c KVM: arm64: Fix GICv4 init when called from vgic_its_create 2018-01-12 11:40:21 +01:00
vgic.c kvm/arm fixes for 4.16, take 2 2018-03-19 17:43:01 +00:00
vgic.h kvm/arm fixes for 4.16, take 2 2018-03-19 17:43:01 +00:00