ChangeSet 1.1559, 2005/02/09 12:09:03-02:00, [EMAIL PROTECTED]

        Cset exclude: [EMAIL PROTECTED]|ChangeSet|20050203152306|59941



 pci-irq.c |   54 ++++++++++++++++++++++++++++--------------------------
 1 files changed, 28 insertions(+), 26 deletions(-)


diff -Nru a/arch/i386/kernel/pci-irq.c b/arch/i386/kernel/pci-irq.c
--- a/arch/i386/kernel/pci-irq.c        2005-02-09 11:03:12 -08:00
+++ b/arch/i386/kernel/pci-irq.c        2005-02-09 11:03:12 -08:00
@@ -1134,34 +1134,36 @@
                if (io_apic_assign_pci_irqs) {
                        int irq;
 
-                       pin--;          /* interrupt pins are numbered starting 
from 1 */
-                       irq = IO_APIC_get_PCI_irq_vector(dev->bus->number, 
PCI_SLOT(dev->devfn), pin);
-                       /*
-                        * Busses behind bridges are typically not listed in 
the MP-table.
-                        * In this case we have to look up the IRQ based on the 
parent bus,
-                        * parent slot, and pin number. The SMP code detects 
such bridged
-                        * busses itself so we should get into this branch 
reliably.
-                        */
-                       temp_dev = dev;
-                       while (irq < 0 && dev->bus->parent) { /* go back to the 
bridge */
-                               struct pci_dev * bridge = dev->bus->self;
+                       if (pin) {
+                               pin--;          /* interrupt pins are numbered 
starting from 1 */
+                               irq = 
IO_APIC_get_PCI_irq_vector(dev->bus->number, PCI_SLOT(dev->devfn), pin);
+                               /*
+                                * Busses behind bridges are typically not 
listed in the MP-table.
+                                * In this case we have to look up the IRQ 
based on the parent bus,
+                                * parent slot, and pin number. The SMP code 
detects such bridged
+                                * busses itself so we should get into this 
branch reliably.
+                                */
+                               temp_dev = dev;
+                               while (irq < 0 && dev->bus->parent) { /* go 
back to the bridge */
+                                       struct pci_dev * bridge = 
dev->bus->self;
 
-                               pin = (pin + PCI_SLOT(dev->devfn)) % 4;
-                               irq = 
IO_APIC_get_PCI_irq_vector(bridge->bus->number, 
-                                               PCI_SLOT(bridge->devfn), pin);
-                               if (irq >= 0)
-                                       printk(KERN_WARNING "PCI: using 
PPB(B%d,I%d,P%d) to get irq %d\n", 
-                                               bridge->bus->number, 
PCI_SLOT(bridge->devfn), pin, irq);
-                               dev = bridge;
+                                       pin = (pin + PCI_SLOT(dev->devfn)) % 4;
+                                       irq = 
IO_APIC_get_PCI_irq_vector(bridge->bus->number, 
+                                                       
PCI_SLOT(bridge->devfn), pin);
+                                       if (irq >= 0)
+                                               printk(KERN_WARNING "PCI: using 
PPB(B%d,I%d,P%d) to get irq %d\n", 
+                                                       bridge->bus->number, 
PCI_SLOT(bridge->devfn), pin, irq);
+                                       dev = bridge;
+                               }
+                               dev = temp_dev;
+                               if (irq >= 0) {
+                                       printk(KERN_INFO "PCI->APIC IRQ 
transform: (B%d,I%d,P%d) -> %d\n",
+                                               dev->bus->number, 
PCI_SLOT(dev->devfn), pin, irq);
+                                       dev->irq = irq;
+                                       return;
+                               } else
+                                       msg = " Probably buggy MP table.";
                        }
-                       dev = temp_dev;
-                       if (irq >= 0) {
-                               printk(KERN_INFO "PCI->APIC IRQ transform: 
(B%d,I%d,P%d) -> %d\n",
-                                       dev->bus->number, PCI_SLOT(dev->devfn), 
pin, irq);
-                               dev->irq = irq;
-                               return;
-                       } else
-                               msg = " Probably buggy MP table.";
                } else if (pci_probe & PCI_BIOS_IRQ_SCAN)
                        msg = "";
                else
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-24" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to