diff options
author | Marc Zyngier <marc.zyngier@arm.com> | 2017-10-27 16:28:41 +0200 |
---|---|---|
committer | Christoffer Dall <christoffer.dall@linaro.org> | 2017-11-10 09:29:36 +0100 |
commit | 07b46ed116cf0893200c97db2f72e0f7839b7f91 (patch) | |
tree | 51febb2f4d0c2844c243d6b43f7ba1d6f64036ee /virt | |
parent | KVM: arm/arm64: GICv4: Handle INT command applied to a VLPI (diff) | |
download | linux-07b46ed116cf0893200c97db2f72e0f7839b7f91.tar.xz linux-07b46ed116cf0893200c97db2f72e0f7839b7f91.zip |
KVM: arm/arm64: GICv4: Unmap VLPI when freeing an LPI
When freeing an LPI (on a DISCARD command, for example), we need
to unmap the VLPI down to the physical ITS level.
Acked-by: Christoffer Dall <cdall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
Diffstat (limited to 'virt')
-rw-r--r-- | virt/kvm/arm/vgic/vgic-its.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/virt/kvm/arm/vgic/vgic-its.c b/virt/kvm/arm/vgic/vgic-its.c index 590f794b7330..ad14af8a4412 100644 --- a/virt/kvm/arm/vgic/vgic-its.c +++ b/virt/kvm/arm/vgic/vgic-its.c @@ -631,8 +631,12 @@ static void its_free_ite(struct kvm *kvm, struct its_ite *ite) list_del(&ite->ite_list); /* This put matches the get in vgic_add_lpi. */ - if (ite->irq) + if (ite->irq) { + if (ite->irq->hw) + WARN_ON(its_unmap_vlpi(ite->irq->host_irq)); + vgic_put_irq(kvm, ite->irq); + } kfree(ite); } |