diff options
| -rw-r--r-- | arch/i386/pci/irq.c | 16 | ||||
| -rw-r--r-- | drivers/acpi/pci_link.c | 5 | ||||
| -rw-r--r-- | drivers/pnp/pnpbios/rsparser.c | 2 | ||||
| -rw-r--r-- | include/linux/acpi.h | 1 |
4 files changed, 22 insertions, 2 deletions
diff --git a/arch/i386/pci/irq.c b/arch/i386/pci/irq.c index 5fc8dc397554..08166ad4bb00 100644 --- a/arch/i386/pci/irq.c +++ b/arch/i386/pci/irq.c @@ -17,6 +17,7 @@ #include <asm/smp.h> #include <asm/io_apic.h> #include <asm/hw_irq.h> +#include <linux/acpi.h> #include "pci.h" @@ -996,13 +997,24 @@ static int __init pcibios_irq_init(void) subsys_initcall(pcibios_irq_init); -void pcibios_penalize_isa_irq(int irq) +static void pirq_penalize_isa_irq(int irq) { /* * If any ISAPnP device reports an IRQ in its list of possible * IRQ's, we try to avoid assigning it to PCI devices. */ - pirq_penalty[irq] += 100; + if (irq < 16) + pirq_penalty[irq] += 100; +} + +void pcibios_penalize_isa_irq(int irq) +{ +#ifdef CONFIG_ACPI_PCI + if (!acpi_noirq) + acpi_penalize_isa_irq(irq); + else +#endif + pirq_penalize_isa_irq(irq); } int pirq_enable_irq(struct pci_dev *dev) diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c index 86e8a0ca0cb8..528d6f6ca0fb 100644 --- a/drivers/acpi/pci_link.c +++ b/drivers/acpi/pci_link.c @@ -786,6 +786,11 @@ static int __init acpi_irq_penalty_update(char *str, int used) return 1; } +void acpi_penalize_isa_irq(int irq) +{ + acpi_irq_penalty[irq] += PIRQ_PENALTY_ISA_USED; +} + /* * Over-ride default table to reserve additional IRQs for use by ISA * e.g. acpi_irq_isa=5 diff --git a/drivers/pnp/pnpbios/rsparser.c b/drivers/pnp/pnpbios/rsparser.c index f990065e19f0..1d719853a7e8 100644 --- a/drivers/pnp/pnpbios/rsparser.c +++ b/drivers/pnp/pnpbios/rsparser.c @@ -7,6 +7,7 @@ #include <linux/ctype.h> #include <linux/pnp.h> #include <linux/pnpbios.h> +#include <linux/pci.h> #include "pnpbios.h" @@ -58,6 +59,7 @@ pnpbios_parse_allocated_irqresource(struct pnp_resource_table * res, int irq) } res->irq_resource[i].start = res->irq_resource[i].end = (unsigned long) irq; + pcibios_penalize_isa_irq(irq); } } diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 041f660ec009..6be8cf4e79bc 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -439,6 +439,7 @@ extern struct acpi_prt_list acpi_prt; struct pci_dev; int acpi_pci_irq_enable (struct pci_dev *dev); +void acpi_penalize_isa_irq(int irq); struct acpi_pci_driver { struct acpi_pci_driver *next; |
