diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2016-11-11 11:13:36 +0100 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2016-11-11 11:13:36 +0100 |
commit | 05d36a7dff0b091803034a0d70b41af86aecbc8d (patch) | |
tree | e8e3768f280fc8ec168471b79d36575c0b9f4638 /virt/kvm/arm/vgic/vgic.c | |
parent | bc33b0ca11e3df467777a4fa7639ba488c9d4911 (diff) | |
parent | d42c79701a3ee5c38fbbc82f98a140420bd40134 (diff) | |
download | linux-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.c | 12 |
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; } |