irqchip/gic-v4: Clear IRQ_DISABLE_UNLAZY again if mapping fails
authorMarc Zyngier <marc.zyngier@arm.com>
Fri, 10 Nov 2017 09:00:41 +0000 (09:00 +0000)
committerMarc Zyngier <marc.zyngier@arm.com>
Fri, 10 Nov 2017 09:50:36 +0000 (09:50 +0000)
Should the call to irq_set_vcpu_affinity() fail at map time,
we should restore the normal lazy-disable behaviour instead
of staying with the eager disable that GICv4 requires.

Reported-by: Eric Auger <eric.auger@redhat.com>
Acked-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
drivers/irqchip/irq-gic-v4.c

index cd0bcc3b7e33709a472c1952c5ee7ccdf1ea0382..dba9d67cb9c138856aec6d5b6917408bf7e87355 100644 (file)
@@ -177,6 +177,7 @@ int its_map_vlpi(int irq, struct its_vlpi_map *map)
                        .map      = map,
                },
        };
+       int ret;
 
        /*
         * The host will never see that interrupt firing again, so it
@@ -184,7 +185,11 @@ int its_map_vlpi(int irq, struct its_vlpi_map *map)
         */
        irq_set_status_flags(irq, IRQ_DISABLE_UNLAZY);
 
-       return irq_set_vcpu_affinity(irq, &info);
+       ret = irq_set_vcpu_affinity(irq, &info);
+       if (ret)
+               irq_clear_status_flags(irq, IRQ_DISABLE_UNLAZY);
+
+       return ret;
 }
 
 int its_get_vlpi(int irq, struct its_vlpi_map *map)