mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-10 07:10:27 +00:00
powerpc/xics: Fix IRQ migration
desc->irq_data points to the top level IRQ data descriptor which is not necessarily in the XICS IRQ domain. MSIs are in another domain for instance. Fix that by looking for a mapping on the low level XICS IRQ domain. Signed-off-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20210701132750.1475580-28-clg@kaod.org
This commit is contained in:
parent
f1a377f86f
commit
c80198a217
@ -183,6 +183,8 @@ void xics_migrate_irqs_away(void)
|
||||
unsigned int irq, virq;
|
||||
struct irq_desc *desc;
|
||||
|
||||
pr_debug("%s: CPU %u\n", __func__, cpu);
|
||||
|
||||
/* If we used to be the default server, move to the new "boot_cpuid" */
|
||||
if (hw_cpu == xics_default_server)
|
||||
xics_update_irq_servers();
|
||||
@ -197,6 +199,7 @@ void xics_migrate_irqs_away(void)
|
||||
struct irq_chip *chip;
|
||||
long server;
|
||||
unsigned long flags;
|
||||
struct irq_data *irqd;
|
||||
|
||||
/* We can't set affinity on ISA interrupts */
|
||||
if (virq < NR_IRQS_LEGACY)
|
||||
@ -204,9 +207,11 @@ void xics_migrate_irqs_away(void)
|
||||
/* We only need to migrate enabled IRQS */
|
||||
if (!desc->action)
|
||||
continue;
|
||||
if (desc->irq_data.domain != xics_host)
|
||||
/* We need a mapping in the XICS IRQ domain */
|
||||
irqd = irq_domain_get_irq_data(xics_host, virq);
|
||||
if (!irqd)
|
||||
continue;
|
||||
irq = desc->irq_data.hwirq;
|
||||
irq = irqd_to_hwirq(irqd);
|
||||
/* We need to get IPIs still. */
|
||||
if (irq == XICS_IPI || irq == XICS_IRQ_SPURIOUS)
|
||||
continue;
|
||||
|
Loading…
x
Reference in New Issue
Block a user