Commit 26186c58 authored by Andy Grover's avatar Andy Grover Committed by Linus Torvalds

[PATCH] redo patch clobbered by ACPI

The latest ACPI merge accidentally clobbered another change in pci-irq.c.
Here's the original patch again (applies fine except for an offset)
Thanks -- Andy
parent a315c77f
...@@ -663,6 +663,10 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign) ...@@ -663,6 +663,10 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign)
* reported by the device if possible. * reported by the device if possible.
*/ */
newirq = dev->irq; newirq = dev->irq;
if (!((1 << newirq) & mask)) {
if ( pci_probe & PCI_USE_PIRQ_MASK) newirq = 0;
else printk(KERN_WARNING "PCI: IRQ %i for device %s doesn't match PIRQ mask - try pci=usepirqmask\n", newirq, dev->slot_name);
}
if (!newirq && assign) { if (!newirq && assign) {
for (i = 0; i < 16; i++) { for (i = 0; i < 16; i++) {
if (!(mask & (1 << i))) if (!(mask & (1 << i)))
...@@ -681,7 +685,8 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign) ...@@ -681,7 +685,8 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign)
irq = pirq & 0xf; irq = pirq & 0xf;
DBG(" -> hardcoded IRQ %d\n", irq); DBG(" -> hardcoded IRQ %d\n", irq);
msg = "Hardcoded"; msg = "Hardcoded";
} else if (r->get && (irq = r->get(pirq_router_dev, dev, pirq))) { } else if ( r->get && (irq = r->get(pirq_router_dev, dev, pirq)) && \
((!(pci_probe & PCI_USE_PIRQ_MASK)) || ((1 << irq) & mask)) ) {
DBG(" -> got IRQ %d\n", irq); DBG(" -> got IRQ %d\n", irq);
msg = "Found"; msg = "Found";
} else if (newirq && r->set && (dev->class >> 8) != PCI_CLASS_DISPLAY_VGA) { } else if (newirq && r->set && (dev->class >> 8) != PCI_CLASS_DISPLAY_VGA) {
...@@ -715,7 +720,9 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign) ...@@ -715,7 +720,9 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign)
continue; continue;
if (info->irq[pin].link == pirq) { if (info->irq[pin].link == pirq) {
/* We refuse to override the dev->irq information. Give a warning! */ /* We refuse to override the dev->irq information. Give a warning! */
if (dev2->irq && dev2->irq != irq) { if ( dev2->irq && dev2->irq != irq && \
(!(pci_probe & PCI_USE_PIRQ_MASK) || \
((1 << dev2->irq) & mask)) ) {
printk(KERN_INFO "IRQ routing conflict for %s, have irq %d, want irq %d\n", printk(KERN_INFO "IRQ routing conflict for %s, have irq %d, want irq %d\n",
dev2->slot_name, dev2->irq, irq); dev2->slot_name, dev2->irq, irq);
continue; continue;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment