Index: arch/i386/kernel/pci-irq.c =================================================================== RCS file: /cvsroot/gkernel/linux_2_4/arch/i386/kernel/pci-irq.c,v retrieving revision 1.1.1.60 diff -u -r1.1.1.60 pci-irq.c --- arch/i386/kernel/pci-irq.c 2001/06/05 02:40:23 1.1.1.60 +++ arch/i386/kernel/pci-irq.c 2001/06/08 05:43:34 @@ -498,6 +498,7 @@ struct irq_info *info; int i, pirq, newirq; int irq = 0; + int retried = 0; u32 mask; struct irq_router *r = pirq_router; struct pci_dev *dev2; @@ -534,16 +535,24 @@ * reported by the device if possible. */ newirq = dev->irq; + +assign_retry: if (!newirq && assign) { for (i = 0; i < 16; i++) { if (!(mask & (1 << i))) continue; if (pirq_penalty[i] < pirq_penalty[newirq] && - !request_irq(i, pcibios_test_irq_handler, SA_SHIRQ, "pci-test", dev)) { + !request_irq(i, pcibios_test_irq_handler, + retried ? SA_SHIRQ : 0, + "pci-test", dev)) { free_irq(i, dev); newirq = i; } } + } + if (!newirq && !retried) { + retried = 1; + goto assign_retry; } DBG(" -> newirq=%d", newirq);