Re: ACPI and broken PCI IRQ sharing on Asus M5N laptop

From: Len Brown
Date: Sun May 09 2004 - 22:34:58 EST


On Sun, 2004-05-09 at 22:47, Brown, Len wrote:
> On Sun, 2004-05-09 at 20:44, Patrick Reynolds wrote:

> > 12: 310 XT-PIC i8042, Intel 82801DB-ICH4, yenta

>
> try booting with "acpi_irq_isa=12"
>
> ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 7 12) *0, disabled.
>
> ACPI: PCI Interrupt Link [LNKB] enabled at IRQ 12

On the assumption that cmdline works, please try this patch
(without any cmdline param).

It simply tweaks the heuristic and makes IRQ12 less attractive compared
to the others.

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) {