2003-09-16 23:12:38

by Andrew de Quincey

[permalink] [raw]
Subject: [PATCH] 2.6.0-test4 Don't change BIOS allocated IRQs

With the help of Chris Wright testing several failed patches, I've tracked
down another ACPI IRQ problem. On many systems, the BIOS
pre-allocates IRQs for certain PCI devices, providing a list of alternate
possibilities as well.

On some systems, changing the IRQ to one of those alternate possibilities
works fine. On others however, it really isn't a good idea. As theres no
way to tell which systems are good and bad in advance, this patch simply
ensures that ACPI does not change an IRQ if the BIOS has pre-allocated it.



--- linux-2.6.0-test4.es7000fix/drivers/acpi/pci_link.c 2003-09-06 00:35:16.000000000 +0100
+++ linux-2.6.0-test4.nochangeirq/drivers/acpi/pci_link.c 2003-09-17 00:00:40.740553544 +0100
@@ -510,15 +510,15 @@
irq = link->irq.active;
} else {
irq = link->irq.possible[0];
- }

- /*
- * Select the best IRQ. This is done in reverse to promote
- * the use of IRQs 9, 10, 11, and >15.
- */
- for (i=(link->irq.possible_count-1); i>0; i--) {
- if (acpi_irq_penalty[irq] > acpi_irq_penalty[link->irq.possible[i]])
- irq = link->irq.possible[i];
+ /*
+ * Select the best IRQ. This is done in reverse to promote
+ * the use of IRQs 9, 10, 11, and >15.
+ */
+ for (i=(link->irq.possible_count-1); i>0; i--) {
+ if (acpi_irq_penalty[irq] > acpi_irq_penalty[link->irq.possible[i]])
+ irq = link->irq.possible[i];
+ }
}

/* Attempt to enable the link device at this IRQ. */


2003-09-17 00:29:53

by Chris Wright

[permalink] [raw]
Subject: Re: [PATCH] 2.6.0-test4 Don't change BIOS allocated IRQs

* Andrew de Quincey ([email protected]) wrote:
> With the help of Chris Wright testing several failed patches, I've tracked
> down another ACPI IRQ problem. On many systems, the BIOS
> pre-allocates IRQs for certain PCI devices, providing a list of alternate
> possibilities as well.

As Andrew showed me, this manifested itself like:

ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 *6 7 10 11 12)
...
ACPI: PCI Interrupt Link [LNKC] enabled at IRQ 10

whereas the patch does:

ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 *6 7 10 11 12)
...
ACPI: PCI Interrupt Link [LNKC] enabled at IRQ 6

> On some systems, changing the IRQ to one of those alternate possibilities
> works fine. On others however, it really isn't a good idea. As theres no
> way to tell which systems are good and bad in advance, this patch simply
> ensures that ACPI does not change an IRQ if the BIOS has pre-allocated it.

Thanks for the patch Andrew ;-) I tested this patch (or applicable
variation) on test3-bk3 (where the original breakage ocurred) up through
test5-mm2, all worked fine. This patch doesn't actually apply to current
test5-bk (inline patch and url below) or test5-mm2 (inline patch and
url below) for those who'd like to test.

thanks,
-chris
--
Linux Security Modules http://lsm.immunix.org http://lsm.bkbits.net

2.6.0-test5-bk_current acpi pci irq fix:
http://developer.osdl.org/chrisw/acpi/2.6.0-test5/test5-bk-acpi_pci_irq_fix.diff

===== drivers/acpi/pci_link.c 1.17 vs edited =====
--- 1.17/drivers/acpi/pci_link.c Sun Aug 31 16:14:25 2003
+++ edited/drivers/acpi/pci_link.c Tue Sep 16 16:59:46 2003
@@ -456,7 +456,6 @@
irq = link->irq.active;
} else {
irq = link->irq.possible[0];
- }

/*
* Select the best IRQ. This is done in reverse to promote
@@ -466,6 +465,7 @@
if (acpi_irq_penalty[irq] > acpi_irq_penalty[link->irq.possible[i]])
irq = link->irq.possible[i];
}
+ }

/* Attempt to enable the link device at this IRQ. */
if (acpi_pci_link_set(link, irq)) {


2.6.0-test5-mm2 acpi pci irq fix:
http://developer.osdl.org/chrisw/acpi/2.6.0-test5-mm2/mm2-acpi_pci_irq_fix.diff

--- 2.6.0-test5-mm2-clean/drivers/acpi/pci_link.c 2003-09-16 14:17:27.000000000 -0700
+++ 2.6.0-test5-mm2/drivers/acpi/pci_link.c 2003-09-16 15:01:31.000000000 -0700
@@ -509,15 +509,15 @@
irq = link->irq.active;
} else {
irq = link->irq.possible[0];
- }

- /*
- * Select the best IRQ. This is done in reverse to promote
- * the use of IRQs 9, 10, 11, and >15.
- */
- for (i=(link->irq.possible_count-1); i>0; i--) {
- if (acpi_irq_penalty[irq] > acpi_irq_penalty[link->irq.possible[i]])
- irq = link->irq.possible[i];
+ /*
+ * Select the best IRQ. This is done in reverse to promote
+ * the use of IRQs 9, 10, 11, and >15.
+ */
+ for (i=(link->irq.possible_count-1); i>0; i--) {
+ if (acpi_irq_penalty[irq] > acpi_irq_penalty[link->irq.possible[i]])
+ irq = link->irq.possible[i];
+ }
}

/* Attempt to enable the link device at this IRQ. */

2003-09-17 01:02:52

by Greg KH

[permalink] [raw]
Subject: Re: [ACPI] [PATCH] 2.6.0-test4 Don't change BIOS allocated IRQs

On Wed, Sep 17, 2003 at 12:11:03AM +0100, Andrew de Quincey wrote:
> With the help of Chris Wright testing several failed patches, I've tracked
> down another ACPI IRQ problem. On many systems, the BIOS
> pre-allocates IRQs for certain PCI devices, providing a list of alternate
> possibilities as well.
>
> On some systems, changing the IRQ to one of those alternate possibilities
> works fine. On others however, it really isn't a good idea. As theres no
> way to tell which systems are good and bad in advance, this patch simply
> ensures that ACPI does not change an IRQ if the BIOS has pre-allocated it.

Nice, the patch below, which Chris told me is from you, fixed my
problems too. It is against 2.6.0-test5-bk3 and fixes bug number 1186
in the bugzilla.kernel.org database.

Many thanks for this work, I really appreciate it.

thanks,

greg k-h

test5-bk_current
===== drivers/acpi/pci_link.c 1.13 vs edited =====
--- 1.13/drivers/acpi/pci_link.c Mon Sep 8 05:51:03 2003
+++ edited/drivers/acpi/pci_link.c Tue Sep 16 16:16:31 2003
@@ -456,7 +456,6 @@
irq = link->irq.active;
} else {
irq = link->irq.possible[0];
- }

/*
* Select the best IRQ. This is done in reverse to promote
@@ -466,6 +465,7 @@
if (acpi_irq_penalty[irq] > acpi_irq_penalty[link->irq.possible[i]])
irq = link->irq.possible[i];
}
+ }

/* Attempt to enable the link device at this IRQ. */
if (acpi_pci_link_set(link, irq)) {


2003-09-17 08:08:35

by Andrew de Quincey

[permalink] [raw]
Subject: Re: [ACPI] [PATCH] 2.6.0-test4 Don't change BIOS allocated IRQs

On Wednesday 17 September 2003 02:02, Greg KH wrote:
> On Wed, Sep 17, 2003 at 12:11:03AM +0100, Andrew de Quincey wrote:
> > With the help of Chris Wright testing several failed patches, I've
> > tracked down another ACPI IRQ problem. On many systems, the BIOS
> > pre-allocates IRQs for certain PCI devices, providing a list of alternate
> > possibilities as well.
> >
> > On some systems, changing the IRQ to one of those alternate possibilities
> > works fine. On others however, it really isn't a good idea. As theres no
> > way to tell which systems are good and bad in advance, this patch simply
> > ensures that ACPI does not change an IRQ if the BIOS has pre-allocated
> > it.
>
> Nice, the patch below, which Chris told me is from you, fixed my
> problems too. It is against 2.6.0-test5-bk3 and fixes bug number 1186
> in the bugzilla.kernel.org database.
>
> Many thanks for this work, I really appreciate it.

Great! thanks for letting me know.