summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2024-11-10 09:37:47 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2024-11-10 09:37:47 -0800
commita9cda7c0ffedb47b23002e109bd26ab2a2ab99c9 (patch)
tree543ce61728b3bd1d08a915ea8840da23230aa6ac /drivers
parent28e43197c4460e08b55554c05998d6de9da7d0b6 (diff)
parent464cb98f1c07298c4c10e714ae0c36338d18d316 (diff)
downloadlinux-a9cda7c0ffedb47b23002e109bd26ab2a2ab99c9.tar.gz
linux-a9cda7c0ffedb47b23002e109bd26ab2a2ab99c9.tar.bz2
linux-a9cda7c0ffedb47b23002e109bd26ab2a2ab99c9.zip
Merge tag 'irq_urgent_for_v6.12_rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq fix from Borislav Petkov: - Make sure GICv3 controller interrupt activation doesn't race with a concurrent deactivation due to propagation delays of the register write * tag 'irq_urgent_for_v6.12_rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: irqchip/gic-v3: Force propagation of the active state with a read-back
Diffstat (limited to 'drivers')
-rw-r--r--drivers/irqchip/irq-gic-v3.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
index ce87205e3e82..8b6159f4cdaf 100644
--- a/drivers/irqchip/irq-gic-v3.c
+++ b/drivers/irqchip/irq-gic-v3.c
@@ -524,6 +524,13 @@ static int gic_irq_set_irqchip_state(struct irq_data *d,
}
gic_poke_irq(d, reg);
+
+ /*
+ * Force read-back to guarantee that the active state has taken
+ * effect, and won't race with a guest-driven deactivation.
+ */
+ if (reg == GICD_ISACTIVER)
+ gic_peek_irq(d, reg);
return 0;
}