On Mon, 29 Jan 2001, Robert Siemer wrote:
> 
> Further I always see '09' in the Configuration Space at Interrupt_Line
> (0x3c) for the 00:01.2 USB Controller. But 2.4.0 says:
>   Interrupt: pin A routed to IRQ 12
> while 2.4.0-test9 states:
>   Interrupt: pin A routed to IRQ 9

Ahhah!

I bet it's the code that goes through all PCI devices, and tries to find
devices that have the same "pirq" (aka "link") value in the tables.

How about this patch? I bet that you'll get a message about pirq table
conflicts. Does USB end up working afterwards?

                Linus

----
--- v2.4.0/linux/arch/i386/kernel/pci-irq.c     Wed Jan  3 20:45:26 2001
+++ linux/arch/i386/kernel/pci-irq.c    Sun Jan 28 23:36:48 2001
@@ -462,18 +462,9 @@
                irq = pirq & 0xf;
                DBG(" -> hardcoded IRQ %d\n", irq);
                msg = "Hardcoded";
-               if (dev->irq && dev->irq != irq) {
-                       printk("IRQ routing conflict in pirq table! Try 
'pci=autoirq'\n");
-                       return 0;
-               }
        } else if (r->get && (irq = r->get(pirq_router_dev, dev, pirq))) {
                DBG(" -> got IRQ %d\n", irq);
                msg = "Found";
-               /* We refuse to override the dev->irq information. Give a warning! */
-               if (dev->irq && dev->irq != irq) {
-                       printk("IRQ routing conflict in pirq table! Try 
'pci=autoirq'\n");
-                       return 0;
-               }
        } else if (newirq && r->set && (dev->class >> 8) != PCI_CLASS_DISPLAY_VGA) {
                DBG(" -> assigning IRQ %d", newirq);
                if (r->set(pirq_router_dev, dev, pirq, newirq)) {
@@ -504,6 +495,11 @@
                if (!info)
                        continue;
                if (info->irq[pin].link == pirq) {
+                       /* We refuse to override the dev->irq information. Give a 
+warning! */
+                       if (dev2->irq && dev2->irq != irq) {
+                               printk("IRQ routing conflict in pirq table for device 
+%s\n", dev2->slot_name);
+                               continue;
+                       }
                        dev2->irq = irq;
                        pirq_penalty[irq]++;
                        if (dev != dev2)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to