• Will Deacon's avatar
    ARM: gic: use handle_fasteoi_irq for SPIs · 1a01753e
    Will Deacon authored
    Currently, the gic uses handle_level_irq for handling SPIs (Shared
    Peripheral Interrupts), requiring active interrupts to be masked at
    the distributor level during IRQ handling.
    
    On a virtualised system, only the CPU interfaces are virtualised in
    hardware. Accesses to the distributor must be trapped by the
    hypervisor, adding latency to the critical interrupt path in Linux.
    
    This patch modifies the GIC code to use handle_fasteoi_irq for handling
    interrupts, which only requires us to signal EOI to the CPU interface
    when handling is complete. Cascaded IRQ handling is also updated to use
    the chained IRQ enter/exit functions to honour the flow control of the
    parent chip.
    
    Note that commit 846afbd1 ("GIC: Dont disable INT in ack callback")
    broke cascading interrupts by forgetting to add IRQ masking. This is
    no longer an issue because the unmask call is now unnecessary.
    
    Tested on Versatile Express and Realview EB (1176 w/ cascaded GICs).
    Tested-and-reviewed-by: default avatarAbhijeet Dharmapurikar <adharmap@codeaurora.org>
    Tested-and-acked-by: default avatarSantosh Shilimkar <santosh.shilimkar@ti.com>
    Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    1a01753e
gic.c 9.54 KB