summaryrefslogtreecommitdiffstats
path: root/virt/kvm/arm/vgic/vgic.c
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2016-11-11 11:13:36 +0100
committerPaolo Bonzini <pbonzini@redhat.com>2016-11-11 11:13:36 +0100
commit05d36a7dff0b091803034a0d70b41af86aecbc8d (patch)
treee8e3768f280fc8ec168471b79d36575c0b9f4638 /virt/kvm/arm/vgic/vgic.c
parentbc33b0ca11e3df467777a4fa7639ba488c9d4911 (diff)
parentd42c79701a3ee5c38fbbc82f98a140420bd40134 (diff)
downloadlinux-05d36a7dff0b091803034a0d70b41af86aecbc8d.tar.gz
linux-05d36a7dff0b091803034a0d70b41af86aecbc8d.tar.bz2
linux-05d36a7dff0b091803034a0d70b41af86aecbc8d.zip
Merge tag 'kvm-arm-for-v4.9-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD
KVM/ARM updates for v4.9-rc4 - Kick the vcpu when a pending interrupt becomes pending again - Prevent access to invalid interrupt registers - Invalid TLBs when two vcpus from the same VM share a CPU
Diffstat (limited to 'virt/kvm/arm/vgic/vgic.c')
-rw-r--r--virt/kvm/arm/vgic/vgic.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/virt/kvm/arm/vgic/vgic.c b/virt/kvm/arm/vgic/vgic.c
index 2893d5ba523a..6440b56ec90e 100644
--- a/virt/kvm/arm/vgic/vgic.c
+++ b/virt/kvm/arm/vgic/vgic.c
@@ -273,6 +273,18 @@ retry:
* no more work for us to do.
*/
spin_unlock(&irq->irq_lock);
+
+ /*
+ * We have to kick the VCPU here, because we could be
+ * queueing an edge-triggered interrupt for which we
+ * get no EOI maintenance interrupt. In that case,
+ * while the IRQ is already on the VCPU's AP list, the
+ * VCPU could have EOI'ed the original interrupt and
+ * won't see this one until it exits for some other
+ * reason.
+ */
+ if (vcpu)
+ kvm_vcpu_kick(vcpu);
return false;
}