Messages in this thread Patch in this message | | | Subject | Re: hdc: lost interrupt ide-cd: cmd 0x3 timed out ... | From | Len Brown <> | Date | 09 May 2004 23:27:03 -0400 |
| |
On Sun, 2004-05-09 at 22:16, Brown, Len wrote: > ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 7 10 11 12 14 15) *9 ... > Didn't see it in your .JPG dmesg, but I expect this was there: > > ACPI: PCI Interrupt Link [LNKB] enabled at IRQ 15 > > and probably that set IRQ15 to level/low which killed IDE. > > Please try the attached patch which disables the sanity > check above. > > Also might be interesting to see what happens on this system > if it is booted (without the patch) with "acpi_irq_balance"
Better yet, here's a proposd fix. Please give it a whirl.
The curve ball was that "illegal" IRQ9. Its "illegalness" caused us to grab a new IRQ off the possible list, but since it wasn't zero, we didn't scrub the new IRQ with our usual heuristics for selecting ISA range IRQs.
I expect this will assign sound to IRQ10 or IRQ11.
thanks, -Len
===== drivers/acpi/pci_link.c 1.28 vs edited ===== --- 1.28/drivers/acpi/pci_link.c Thu May 6 16:03:17 2004 +++ edited/drivers/acpi/pci_link.c Sun May 9 23:16:48 2004 @@ -478,7 +478,7 @@ PIRQ_PENALTY_PCI_AVAILABLE, /* IRQ9 PCI, often acpi */ PIRQ_PENALTY_PCI_AVAILABLE, /* IRQ10 PCI */ PIRQ_PENALTY_PCI_AVAILABLE, /* IRQ11 PCI */ - PIRQ_PENALTY_ISA_TYPICAL, /* IRQ12 mouse */ + PIRQ_PENALTY_ISA_USED, /* IRQ12 mouse */ PIRQ_PENALTY_ISA_USED, /* IRQ13 fpe, sometimes */ PIRQ_PENALTY_ISA_USED, /* IRQ14 ide0 */ PIRQ_PENALTY_ISA_USED, /* IRQ15 ide1 */ @@ -545,17 +545,23 @@ if (link->irq.active == link->irq.possible[i]) break; } + /* + * forget active IRQ that is not in possible list + */ + if (i == link->irq.possible_count) { + if (acpi_strict) + printk(KERN_WARNING PREFIX "_CRS %d not found" + " in _PRS\n", link->irq.active); + link->irq.active = 0; + } /* * if active found, use it; else pick entry from end of possible list. */ - if (i != link->irq.possible_count) { + if (link->irq.active) { irq = link->irq.active; } else { irq = link->irq.possible[link->irq.possible_count - 1]; - if (acpi_strict) - printk(KERN_WARNING PREFIX "_CRS %d not found" - " in _PRS\n", link->irq.active); } if (acpi_irq_balance || !link->irq.active) { | |