• James Gowans's avatar
    irqchip/gic-v3-its: Enable RESEND_WHEN_IN_PROGRESS for LPIs · 8f4b5895
    James Gowans authored
    GICv3 LPIs are impacted by an architectural design issue: they do not
    have a global active state and as such a given LPI can be delivered to
    a new CPU after an affinity change while the previous instance of the
    same LPI handler has not yet completed on the original CPU.
    
    If LPIs had an active state, this second LPI would not be delivered
    until the first CPU deactivated the initial LPI, just like SPIs.
    
    To solve this issue, use the newly introduced IRQD_RESEND_WHEN_IN_PROGRESS
    flag, ensuring that we do not lose an LPI being delivered during that window
    by getting the GIC to resend it.
    
    This workaround gets enabled for all LPIs, including the VPE doorbells.
    Suggested-by: default avatarMarc Zyngier <maz@kernel.org>
    Signed-off-by: default avatarJames Gowans <jgowans@amazon.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: KarimAllah Raslan <karahmed@amazon.com>
    Cc: Yipeng Zou <zouyipeng@huawei.com>
    Cc: Zhang Jianhua <chris.zjh@huawei.com>
    [maz: massaged commit message]
    Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20230608120021.3273400-4-jgowans@amazon.com
    8f4b5895
irq-gic-v3-its.c 139 KB