xen/arm: gic-v3: Make sure read from ICC_IAR1_EL1 is visible on the redistributor

"The effects of reading ICC_IAR0_EL1 and ICC_IAR1_EL1 on the state of a
returned INTID are not guaranteed to be visible until after the execution
of a DSB".

Because of the GIC is an external component, a dsb sy is required.
Without it the sysreg read may not have been made visible on the
redistributor.

Signed-off-by: Julien Grall <julien.grall@arm.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
This commit is contained in:
Julien Grall authored and Stefano Stabellini committed 2017-01-18 13:38:32 -08:00
1 parent 468a313def
commit 40837a38ef
1 file changed
+5 -1
+5 -1
View File
@@ -455,7 +455,11 @@ static void gicv3_dir_irq(struct irq_desc *irqd)
static unsigned int gicv3_read_irq(void)
{
return READ_SYSREG32(ICC_IAR1_EL1);
unsigned int irq = READ_SYSREG32(ICC_IAR1_EL1);
dsb(sy);
return irq;
}
static inline uint64_t gicv3_mpidr_to_affinity(int cpu)
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.