]> git.baikalelectronics.ru Git - kernel.git/commit
KVM: arm/arm64: vgic: Disallow Active+Pending for level interrupts
authorMarc Zyngier <marc.zyngier@arm.com>
Fri, 9 Mar 2018 14:59:40 +0000 (14:59 +0000)
committerMarc Zyngier <marc.zyngier@arm.com>
Mon, 26 Mar 2018 09:54:23 +0000 (10:54 +0100)
commit5b0ec7dc8c5818fdf3d239fef218165970423ee8
tree0fa4a9317d42a103930ef436963256d312ad5935
parent778c1fc9867b8f3b3c827e30f7c6b69c3b7682e3
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>
virt/kvm/arm/vgic/vgic-v2.c
virt/kvm/arm/vgic/vgic-v3.c