[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/4] xen/arm: gic: Ensure we have an ISB between ack and do_IRQ()
On 23.10.18 21:17, Julien Grall wrote: > Devices that expose their interrupt status registers via system > registers (e.g. Statistical profiling, CPU PMU, DynamIQ PMU, arch timer, > vgic (although unused by Linux), ...) rely on a context synchronising > operation on the CPU to ensure that the updated status register is > visible to the CPU when handling the interrupt. This usually happens as > a result of taking the IRQ exception in the first place, but there are > two race scenarios where this isn't the case. > > For example, let's say we have two peripherals (X and Y), where Y uses a > system register for its interrupt status. > > Case 1: > 1. CPU takes an IRQ exception as a result of X raising an interrupt > 2. Y then raises its interrupt line, but the update to its system > register is not yet visible to the CPU > 3. The GIC decides to expose Y's interrupt number first in the Ack > register > 4. The CPU runs the IRQ handler for Y, but the status register is stale > > Case 2: > 1. CPU takes an IRQ exception as a result of X raising an interrupt > 2. CPU reads the interrupt number for X from the Ack register and runs > its IRQ handler > 3. Y raises its interrupt line and the Ack register is updated, but > again, the update to its system register is not yet visible to the > CPU. > 4. Since the GIC drivers poll the Ack register, we read Y's interrupt > number and run its handler without a context synchronisation > operation, therefore seeing the stale register value. > > In either case, we run the risk of missing an IRQ. This patch solves the > problem by ensuring that we execute an ISB in the GIC drivers prior > to invoking the interrupt handler. > > Based on Linux commit 39a06b67c2c1256bcf2361a1f67d2529f70ab206 > "irqchip/gic: Ensure we have an ISB between ack and ->handle_irq". > > Signed-off-by: Julien Grall <julien.grall@xxxxxxx> > > --- Reviewed-by: Andrii Anisov<andrii_anisov@xxxxxxxx> -- *Andrii Anisov* _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |