As the enabling of the guest timer interrupts is done by
accessing a system register, make sure the access is correctly
synchronised.

Signed-off-by: Marc Zyngier <[email protected]>
---
 drivers/irqchip/irq-apple-aic.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/irqchip/irq-apple-aic.c b/drivers/irqchip/irq-apple-aic.c
index ddc0856f36a5..447c9e87f13a 100644
--- a/drivers/irqchip/irq-apple-aic.c
+++ b/drivers/irqchip/irq-apple-aic.c
@@ -242,9 +242,11 @@ static void aic_fiq_mask(struct irq_data *d)
        switch (d->hwirq) {
        case AIC_TMR_GUEST_PHYS:
                sysreg_clear_set_s(SYS_APL_VM_TMR_FIQ_ENA_EL1, 
VM_TMR_FIQ_ENABLE_P, 0);
+               isb();
                break;
        case AIC_TMR_GUEST_VIRT:
                sysreg_clear_set_s(SYS_APL_VM_TMR_FIQ_ENA_EL1, 
VM_TMR_FIQ_ENABLE_V, 0);
+               isb();
                break;
        }
 }
@@ -254,9 +256,11 @@ static void aic_fiq_unmask(struct irq_data *d)
        switch (d->hwirq) {
        case AIC_TMR_GUEST_PHYS:
                sysreg_clear_set_s(SYS_APL_VM_TMR_FIQ_ENA_EL1, 0, 
VM_TMR_FIQ_ENABLE_P);
+               isb();
                break;
        case AIC_TMR_GUEST_VIRT:
                sysreg_clear_set_s(SYS_APL_VM_TMR_FIQ_ENA_EL1, 0, 
VM_TMR_FIQ_ENABLE_V);
+               isb();
                break;
        }
 }
-- 
2.29.2

_______________________________________________
kvmarm mailing list
[email protected]
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

Reply via email to