[POWERPC] Fix PCI IRQ fallback code to not map IRQ 0
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 20 Dec 2007 04:10:02 +0000 (15:10 +1100)
committerPaul Mackerras <paulus@samba.org>
Thu, 20 Dec 2007 05:18:17 +0000 (16:18 +1100)
The PCI IRQ code has a fallback when the device-tree parsing fails, that
tries to map the interrupt indicated by PCI_INTERRUPT_LINE if the firmware
set something in there. This is a bit fragile but has proven useful in some
cases so far. However, it's causing us to incorrectly try to map interrupt 0
on various setups, so let's prevent that case, as none of the cases where
the fallback is legit should have an IRQ 0.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/kernel/pci-common.c

index 88838b0f8b90b90d86d40f3f2199a59a79f7637f..571854f2906c7ddeec465ecd451e767231babb62 100644 (file)
@@ -225,10 +225,11 @@ int pci_read_irq_line(struct pci_dev *pci_dev)
                if (pin == 0)
                        return -1;
                if (pci_read_config_byte(pci_dev, PCI_INTERRUPT_LINE, &line) ||
-                   line == 0xff) {
+                   line == 0xff || line == 0) {
                        return -1;
                }
-               DBG(" -> no map ! Using irq line %d from PCI config\n", line);
+               DBG(" -> no map ! Using line %d (pin %d) from PCI config\n",
+                   line, pin);
 
                virq = irq_create_mapping(NULL, line);
                if (virq != NO_IRQ)