• Marc Zyngier's avatar
    irqchip/GIC: Convert to EOImode == 1 · 0b996fd3
    Marc Zyngier authored
    So far, GICv2 has been used with EOImode == 0. The effect of this
    mode is to perform the priority drop and the deactivation of the
    interrupt at the same time.
    
    While this works perfectly for Linux (we only have a single priority),
    it causes issues when an interrupt is forwarded to a guest, and when
    we want the guest to perform the EOI itself.
    
    For this case, the GIC architecture provides EOImode == 1, where:
    - A write to the EOI register drops the priority of the interrupt
      and leaves it active. Other interrupts at the same priority level
      can now be taken, but the active interrupt cannot be taken again
    - A write to the DIR marks the interrupt as inactive, meaning it can
      now be taken again.
    
    We only enable this feature when booted in HYP mode and that
    the device-tree reported a suitable CPU interface. Observable behaviour
    should remain unchanged.
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Reviewed-and-tested-by: default avatarEric Auger <eric.auger@linaro.org>
    Cc: Christoffer Dall <christoffer.dall@linaro.org>
    Cc: Jiang Liu <jiang.liu@linux.intel.com>
    Cc: <linux-arm-kernel@lists.infradead.org>
    Cc: kvmarm@lists.cs.columbia.edu
    Cc: Jason Cooper <jason@lakedaemon.net>
    Link: http://lkml.kernel.org/r/1440604845-28229-4-git-send-email-marc.zyngier@arm.comSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    0b996fd3
irq-gic.c 31.2 KB