KVM: arm64: GICv4: Do not perform a map to a mapped vLPI
authorKunkun Jiang <jiangkunkun@huawei.com>
Mon, 20 Nov 2023 13:12:10 +0000 (21:12 +0800)
committerOliver Upton <oliver.upton@linux.dev>
Mon, 20 Nov 2023 19:13:32 +0000 (19:13 +0000)
Before performing a map, let's check whether the vLPI has been
mapped.

Fixes: 196b136498b3 ("KVM: arm/arm64: GICv4: Wire mapping/unmapping of VLPIs in VFIO irq bypass")
Signed-off-by: Kunkun Jiang <jiangkunkun@huawei.com>
Acked-by: Marc Zyngier <maz@kernel.org>
Reviewed-by: Zenghui Yu <yuzenghui@huawei.com>
Link: https://lore.kernel.org/r/20231120131210.2039-1-jiangkunkun@huawei.com
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
arch/arm64/kvm/vgic/vgic-v4.c

index 339a551..74a67ad 100644 (file)
@@ -436,6 +436,10 @@ int kvm_vgic_v4_set_forwarding(struct kvm *kvm, int virq,
        if (ret)
                goto out;
 
+       /* Silently exit if the vLPI is already mapped */
+       if (irq->hw)
+               goto out;
+
        /*
         * Emit the mapping request. If it fails, the ITS probably
         * isn't v4 compatible, so let's silently bail out. Holding