summaryrefslogtreecommitdiffstats
path: root/kernel/drivers/irqchip/irq-gic.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/drivers/irqchip/irq-gic.c')
-rw-r--r--kernel/drivers/irqchip/irq-gic.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/kernel/drivers/irqchip/irq-gic.c b/kernel/drivers/irqchip/irq-gic.c
index abf2ffaed..cebd8efe6 100644
--- a/kernel/drivers/irqchip/irq-gic.c
+++ b/kernel/drivers/irqchip/irq-gic.c
@@ -347,6 +347,14 @@ static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)
if (static_key_true(&supports_deactivate))
writel_relaxed(irqstat, cpu_base + GIC_CPU_DEACTIVATE);
#ifdef CONFIG_SMP
+ /*
+ * Ensure any shared data written by the CPU sending
+ * the IPI is read after we've read the ACK register
+ * on the GIC.
+ *
+ * Pairs with the write barrier in gic_raise_softirq
+ */
+ smp_rmb();
handle_IPI(irqnr, regs);
#endif
continue;