powerpc/xive: Ensure active irqd when setting affinity
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 2 Aug 2017 01:54:41 +0000 (20:54 -0500)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 10 Aug 2017 12:30:03 +0000 (22:30 +1000)
Ensure irqd is active before attempting to set affinity. This should
make the set affinity code more robust. For instance, this prevents
these messages seen on a 4.12 based kernel when taking cpus offline:

   [  123.053037264,3] XIVE[ IC 00  ] ISN 2 lead to invalid IVE !
   [   77.885859] xive: Error -6 reconfiguring irq 17
   [   77.885862] IRQ17: set affinity failed(-6).

That particular case has been fixed in 4.13-rc1 by commit
91f26cb4cd3c ("genirq/cpuhotplug: Do not migrated shutdown irqs").

Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/sysdev/xive/common.c

index 6595462b1fc8e8dcef978d00fa2ac0ed7dfc2433..2708d423d8b92f299dbff2e6cdb461e6a6c83df5 100644 (file)
@@ -672,6 +672,10 @@ static int xive_irq_set_affinity(struct irq_data *d,
        if (cpumask_any_and(cpumask, cpu_online_mask) >= nr_cpu_ids)
                return -EINVAL;
 
+       /* Don't do anything if the interrupt isn't started */
+       if (!irqd_is_started(d))
+               return IRQ_SET_MASK_OK;
+
        /*
         * If existing target is already in the new mask, and is
         * online then do nothing.