patch-2.4.21 linux-2.4.21/arch/x86_64/kernel/pci-irq.c

Next file: linux-2.4.21/arch/x86_64/kernel/pci-x86_64.c
Previous file: linux-2.4.21/arch/x86_64/kernel/pci-gart.c
Back to the patch index
Back to the overall index

diff -urN linux-2.4.20/arch/x86_64/kernel/pci-irq.c linux-2.4.21/arch/x86_64/kernel/pci-irq.c
@@ -742,9 +742,15 @@
 void pcibios_enable_irq(struct pci_dev *dev)
 {
 		u8 pin;
+	extern int interrupt_line_quirk;
+
 		pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
 	if (pin && !pcibios_lookup_irq(dev, 1) && !dev->irq) {
 			char *msg;
+		/* With IDE legacy devices the IRQ lookup failure is not a problem.. */
+		if (dev->class >> 8 == PCI_CLASS_STORAGE_IDE && !(dev->class & 0x5))
+			return;
+
 			if (io_apic_assign_pci_irqs)
 				msg = " Probably buggy MP table.";
 			else if (pci_probe & PCI_BIOS_IRQ_SCAN)
@@ -754,4 +760,8 @@
 			printk(KERN_WARNING "PCI: No IRQ known for interrupt pin %c of device %s.%s\n",
 			       'A' + pin - 1, dev->slot_name, msg);
 	}
+	/* VIA bridges use interrupt line for apic/pci steering across
+	   the V-Link */
+	else if (interrupt_line_quirk)
+		pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq);
 }

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)