Skip to content

Commit d7f39c4

Browse files
author
Marc Zyngier
committed
irqchip/bcm2836: Fix IPI acknowledgement after conversion to handle_percpu_devid_irq
It appears that despite its name, the bcm2836_arm_irqchip_ipi_eoi() callback is an acknowledgement, and not an EOI. This means that we lose IPIs that are made pending between the handling of the IPI and the write to LOCAL_MAILBOX0_CLR0. With the right timing, things fail nicely. This used to work with handle_percpu_devid_fasteoi_ipi(), which started by eoi-ing the interrupt. With the standard fasteoi flow, this doesn't work anymore. So let's use this callback for what it is, an ack. Your favourite RPi-2/3 is back up and running. Fixes: ffdad79 ("irqchip/bcm2836: Make IPIs use handle_percpu_devid_irq()") Cc: Valentin Schneider <[email protected]> Reported-by: Guenter Roeck <[email protected]> Tested-by: Guenter Roeck <[email protected]> Signed-off-by: Marc Zyngier <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent e90f55e commit d7f39c4

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

drivers/irqchip/irq-bcm2836.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ static void bcm2836_arm_irqchip_handle_ipi(struct irq_desc *desc)
167167
chained_irq_exit(chip, desc);
168168
}
169169

170-
static void bcm2836_arm_irqchip_ipi_eoi(struct irq_data *d)
170+
static void bcm2836_arm_irqchip_ipi_ack(struct irq_data *d)
171171
{
172172
int cpu = smp_processor_id();
173173

@@ -195,7 +195,7 @@ static struct irq_chip bcm2836_arm_irqchip_ipi = {
195195
.name = "IPI",
196196
.irq_mask = bcm2836_arm_irqchip_dummy_op,
197197
.irq_unmask = bcm2836_arm_irqchip_dummy_op,
198-
.irq_eoi = bcm2836_arm_irqchip_ipi_eoi,
198+
.irq_ack = bcm2836_arm_irqchip_ipi_ack,
199199
.ipi_send_mask = bcm2836_arm_irqchip_ipi_send_mask,
200200
};
201201

0 commit comments

Comments
 (0)