linux-stable/virt/kvm
Christoffer Dall 35a2d58588 KVM: arm/arm64: vgic-new: Synchronize changes to active state
When modifying the active state of an interrupt via the MMIO interface,
we should ensure that the write has the intended effect.

If a guest sets an interrupt to active, but that interrupt is already
flushed into a list register on a running VCPU, then that VCPU will
write the active state back into the struct vgic_irq upon returning from
the guest and syncing its state.  This is a non-benign race, because the
guest can observe that an interrupt is not active, and it can have a
reasonable expectations that other VCPUs will not ack any IRQs, and then
set the state to active, and expect it to stay that way.  Currently we
are not honoring this case.

Thefore, change both the SACTIVE and CACTIVE mmio handlers to stop the
world, change the irq state, potentially queue the irq if we're setting
it to active, and then continue.

We take this chance to slightly optimize these functions by not stopping
the world when touching private interrupts where there is inherently no
possible race.

Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-05-20 16:26:38 +02:00
..
arm KVM: arm/arm64: vgic-new: Synchronize changes to active state 2016-05-20 16:26:38 +02:00
async_pf.c Merge branch 'mm-pkeys-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2016-03-20 19:08:56 -07:00
async_pf.h KVM: fix checkpatch.pl errors in kvm/async_pf.h 2015-06-19 17:16:25 +02:00
coalesced_mmio.c KVM: move iodev.h from virt/kvm/ to include/kvm 2015-03-26 21:43:12 +00:00
coalesced_mmio.h KVM: make the declaration of functions within 80 characters 2015-09-14 18:43:19 +02:00
eventfd.c KVM: x86: merge kvm_arch_set_irq with kvm_set_msi_inatomic 2015-11-04 16:24:35 +01:00
irqchip.c kvm/irqchip: kvm_arch_irq_routing_update renaming split 2015-11-25 17:24:21 +01:00
Kconfig KVM: don't pointlessly leave KVM_COMPAT=y in non-KVM configs 2015-11-04 16:24:30 +01:00
kvm_main.c KVM: Replace smp_mb() with smp_load_acquire() in the kvm_flush_remote_tlbs() 2016-03-22 16:38:33 +01:00
vfio.c KVM: count number of assigned devices 2015-07-10 13:25:26 +02:00
vfio.h kvm: vfio: fix unregister kvm_device_ops of vfio 2014-10-24 13:30:47 +02:00