]> git.baikalelectronics.ru Git - kernel.git/commitdiff
powerpc/xics: Fix IRQ migration
authorCédric Le Goater <clg@kaod.org>
Thu, 1 Jul 2021 13:27:45 +0000 (15:27 +0200)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 10 Aug 2021 13:15:01 +0000 (23:15 +1000)
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
arch/powerpc/sysdev/xics/xics-common.c

index febab57f060f73189c3dd009ea173def6616ab23..4a7687caec7553ad5ac4ffe3effb95ab5d7a4e38 100644 (file)
@@ -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;