irqchip/gic: Only set the EOImodeNS bit for the root controller
authorJon Hunter <jonathanh@nvidia.com>
Tue, 9 Feb 2016 15:24:57 +0000 (15:24 +0000)
committerMarc Zyngier <marc.zyngier@arm.com>
Thu, 11 Feb 2016 10:20:02 +0000 (10:20 +0000)
EOImode1 is only used for the root controller and hence only the root
controller uses the eoimode1 functions for handling interrupts. However,
if the root controller supports EOImode1, then the EOImodeNS bit will be
set for all GICs, enabling EOImode1. This is not what we want and this
causes interrupts on non-root GICs to only be dropped in priority but
never deactivated. Therefore, only set the EOImodeNS bit for the root
controller.

Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
drivers/irqchip/irq-gic.c

index db7b161b0295c128231b5b121087b99e99634a47..8f9ebf714e2bbc154d7a045d27920f6c95f7cce6 100644 (file)
@@ -437,7 +437,7 @@ static void gic_cpu_if_up(struct gic_chip_data *gic)
        u32 bypass = 0;
        u32 mode = 0;
 
-       if (static_key_true(&supports_deactivate))
+       if (gic == &gic_data[0] && static_key_true(&supports_deactivate))
                mode = GIC_CPU_CTRL_EOImodeNS;
 
        /*