irqchip/gic-v3-its: Enable RESEND_WHEN_IN_PROGRESS for LPIs
authorJames Gowans <jgowans@amazon.com>
Thu, 8 Jun 2023 12:00:21 +0000 (14:00 +0200)
committerMarc Zyngier <maz@kernel.org>
Fri, 16 Jun 2023 11:23:40 +0000 (12:23 +0100)
commit8f4b589595d01f882d63d21efe15af4a5ad7c59b
tree322848c53d3fc631222e9e9b4a724e936d511b6f
parent9c15eeb5362c48dd27d51bd72e8873341fa9383c
irqchip/gic-v3-its: Enable RESEND_WHEN_IN_PROGRESS for LPIs

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: Marc Zyngier <maz@kernel.org>
Signed-off-by: James 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: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20230608120021.3273400-4-jgowans@amazon.com
drivers/irqchip/irq-gic-v3-its.c