aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJames Gowans <jgowans@amazon.com>2023-06-08 14:00:21 +0200
committerMarc Zyngier <maz@kernel.org>2023-06-16 12:23:40 +0100
commit8f4b589595d01f882d63d21efe15af4a5ad7c59b (patch)
tree322848c53d3fc631222e9e9b4a724e936d511b6f /drivers
parentgenirq: Allow fasteoi handler to resend interrupts on concurrent handling (diff)
downloadlinux-8f4b589595d01f882d63d21efe15af4a5ad7c59b.tar.gz
linux-8f4b589595d01f882d63d21efe15af4a5ad7c59b.zip
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
Diffstat (limited to 'drivers')
-rw-r--r--drivers/irqchip/irq-gic-v3-its.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index 0ec2b1e1df75..1994541eaef8 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -3585,6 +3585,7 @@ static int its_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
irqd = irq_get_irq_data(virq + i);
irqd_set_single_target(irqd);
irqd_set_affinity_on_activate(irqd);
+ irqd_set_resend_when_in_progress(irqd);
pr_debug("ID:%d pID:%d vID:%d\n",
(int)(hwirq + i - its_dev->event_map.lpi_base),
(int)(hwirq + i), virq + i);
@@ -4523,6 +4524,7 @@ static int its_vpe_irq_domain_alloc(struct irq_domain *domain, unsigned int virq
irq_domain_set_hwirq_and_chip(domain, virq + i, i,
irqchip, vm->vpes[i]);
set_bit(i, bitmap);
+ irqd_set_resend_when_in_progress(irq_get_irq_data(virq + i));
}
if (err) {
24 04:05:51 +0100'>2016-01-24MIPS: zboot: Add support for serial debug using the PROMAlban Bedel3-0/+12 2016-01-24MIPS: zboot: Avoid useless rebuildsAlban Bedel1-6/+8 2016-01-24MIPS: BMIPS: Enable ARCH_WANT_OPTIONAL_GPIOLIBFlorian Fainelli1-0/+1 2016-01-24MIPS: bcm63xx: nvram: Remove unused bcm63xx_nvram_get_psi_size() functionSimon Arlott2-13/+0 2016-01-24MIPS: bcm963xx: Update bcm_tag field image_sequenceSimon Arlott1-6/+5 2016-01-24MIPS: bcm963xx: Move extended flash address to bcm_tag header fileSimon Arlott2-4/+7 2016-01-24MIPS: bcm963xx: Move Broadcom BCM963xx image tag data structureSimon Arlott3-4/+7 2016-01-24MIPS: bcm63xx: nvram: Use nvram structure definition from header fileSimon Arlott1-32/+3 2016-01-24MIPS: bcm963xx: Add Broadcom BCM963xx board nvram data structureSimon Arlott2-0/+113 2016-01-24MAINTAINERS: Add KVM for MIPS entryJames Hogan1-0/+8 2016-01-24MIPS: KVM: Add missing newline to kvm_err()James Hogan1-1/+1 2016-01-24MIPS: Move KVM specific opcodes into asm/inst.hJames Hogan4-28/+5 2016-01-24MIPS: KVM: Use cacheops.h definitionsJames Hogan1-22/+8 2016-01-24MIPS: Break down cacheops.h definitionsJames Hogan1-42/+64 2016-01-24MIPS: Use EXCCODE_ constants with set_except_vector()James Hogan2-30/+30 2016-01-24MIPS: Update trap codesJames Hogan1-2/+10 2016-01-24MIPS: Move Cause.ExcCode trap codes to mipsregs.hJames Hogan5-83/+80 2016-01-24MIPS: KVM: Make kvm_mips_{init,exit}() staticJames Hogan1-2/+2 2016-01-24MIPS: KVM: Refactor added offsetof()sJames Hogan1-7/+3 2016-01-24MIPS: KVM: Convert EXPORT_SYMBOL to _GPLJames Hogan2-19/+19 2016-01-24MIPS: KVM: Drop unused kvm_mips_host_tlb_inv_index()James Hogan2-38/+0 2016-01-24MIPS: Move definition of DC bit to mipsregs.hJames Hogan2-3/+2 2016-01-24MIPS: KVM: Drop some unused definitions from kvm_host.hJames Hogan1-5/+0 2016-01-24MIPS: KVM: Trivial whitespace and style fixesJames Hogan5-15/+14