]> rtime.felk.cvut.cz Git - jailhouse.git/commit
arm: GICv3: handle IRQs
authorJean-Philippe Brucker <jean-philippe.brucker@arm.com>
Wed, 25 Jun 2014 13:50:00 +0000 (14:50 +0100)
committerJan Kiszka <jan.kiszka@siemens.com>
Fri, 19 Dec 2014 10:04:07 +0000 (11:04 +0100)
commitfa4d4c231da8e2a017c5a946af1b928a6823a60e
tree41b380dce3dd79c2e3d988a86846507e9b14a51b
parent493034b26f44e75914dc897bab5ff6aedf596317
arm: GICv3: handle IRQs

The GIC IRQ handler loops over the ack register to get all pending IRQs.
It then dispatches them either in the common SGI handler, or injects
them into the cell.
A first attempt to directly inject an IRQ by writing to a free list
register is done. If it fails, the IRQ is appended to the pending list,
and an attempt will be made later on, once a maintenance interrupt is
received.
Injection in the GIC is a little bit expensive for the moment, because
it needs to iterate over all list registers that have a valid interrupt,
to check that there will be no duplication. This could be optimized by
only checking the `active' GIC register for SPIs and PPIs.
A future patch will also add proper handling of the maintenance bits in
the vGIC.

Signed-off-by: Jean-Philippe Brucker <jean-philippe.brucker@arm.com>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
hypervisor/arch/arm/control.c
hypervisor/arch/arm/gic-v3.c
hypervisor/arch/arm/include/asm/control.h
hypervisor/arch/arm/include/asm/irqchip.h
hypervisor/arch/arm/include/asm/platform.h
hypervisor/arch/arm/irqchip.c