mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-09 23:39:18 +00:00
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: ffdad793d579 ("irqchip/bcm2836: Make IPIs use handle_percpu_devid_irq()") Cc: Valentin Schneider <valentin.schneider@arm.com> Reported-by: Guenter Roeck <linux@roeck-us.net> Tested-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/c9fb4ab3-a5cb-648c-6de3-c6a871e60870@roeck-us.net
This commit is contained in:
parent
e90f55e019
commit
d7f39c40eb
@ -167,7 +167,7 @@ static void bcm2836_arm_irqchip_handle_ipi(struct irq_desc *desc)
|
||||
chained_irq_exit(chip, desc);
|
||||
}
|
||||
|
||||
static void bcm2836_arm_irqchip_ipi_eoi(struct irq_data *d)
|
||||
static void bcm2836_arm_irqchip_ipi_ack(struct irq_data *d)
|
||||
{
|
||||
int cpu = smp_processor_id();
|
||||
|
||||
@ -195,7 +195,7 @@ static struct irq_chip bcm2836_arm_irqchip_ipi = {
|
||||
.name = "IPI",
|
||||
.irq_mask = bcm2836_arm_irqchip_dummy_op,
|
||||
.irq_unmask = bcm2836_arm_irqchip_dummy_op,
|
||||
.irq_eoi = bcm2836_arm_irqchip_ipi_eoi,
|
||||
.irq_ack = bcm2836_arm_irqchip_ipi_ack,
|
||||
.ipi_send_mask = bcm2836_arm_irqchip_ipi_send_mask,
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user