/*
* stash over-ride to indicate we've been here diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c index cfd7581cc19f..b09ad554430a 100644
--- a/drivers/acpi/pci_link.c
+++ b/drivers/acpi/pci_link.c
@@ -826,6 +826,22 @@ void acpi_penalize_isa_irq(int irq, int active) }
/*
+ * Penalize IRQ used by ACPI SCI. If ACPI SCI pin attributes conflict
+with
+ * PCI IRQ attributes, mark ACPI SCI as ISA_ALWAYS so it won't be use
+for
+ * PCI IRQs.
+ */
+void acpi_penalize_sci_irq(int irq, int trigger, int polarity) {
+ if (irq >= 0 && irq < ARRAY_SIZE(acpi_irq_penalty)) {
+ if (trigger != ACPI_MADT_TRIGGER_LEVEL ||
+ polarity != ACPI_MADT_POLARITY_ACTIVE_LOW)
+ acpi_irq_penalty[irq] += PIRQ_PENALTY_ISA_ALWAYS;
+ else
+ acpi_irq_penalty[irq] += PIRQ_PENALTY_PCI_USING;
+ }
+}
+
+/*
* Over-ride default table to reserve additional IRQs for use by ISA
* e.g. acpi_irq_isa=5
* Useful for telling ACPI how not to interfere with your ISA sound card.
diff --git a/include/linux/acpi.h b/include/linux/acpi.h index d2445fa9999f..0b2394f61af4 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -221,7 +221,7 @@ struct pci_dev;
int acpi_pci_irq_enable (struct pci_dev *dev); void acpi_penalize_isa_irq(int irq, int active);
-
+void acpi_penalize_sci_irq(int irq, int trigger, int polarity);
void acpi_pci_irq_disable (struct pci_dev *dev);
Recent work on bug 101301 was done in email rather than in the bug. The following patch was tested on Hyper-V and then accepted into the PCI tree.
arch/x86/ kernel/ acpi/boot. c | 1 + acpi/pci_ link.c | 16 ++++++++++++++++ linux/acpi. h | 2 +-
drivers/
include/
3 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/arch/ x86/kernel/ acpi/boot. c b/arch/ x86/kernel/ acpi/boot. c index e49ee24da85e. .9393896717d0 100644 x86/kernel/ acpi/boot. c x86/kernel/ acpi/boot. c ioapic_ setup(u8 bus_irq, u16 polarity, u16 trigger, POLARITY_ MASK;
--- a/arch/
+++ b/arch/
@@ -445,6 +445,7 @@ static void __init acpi_sci_
polarity = acpi_sci_flags & ACPI_MADT_
mp_override_ legacy_ irq(bus_ irq, polarity, trigger, gsi); sci_irq( bus_irq, trigger, polarity);
+ acpi_penalize_
/* acpi/pci_ link.c b/drivers/ acpi/pci_ link.c index cfd7581cc19f. .b09ad554430a 100644 acpi/pci_ link.c acpi/pci_ link.c isa_irq( int irq, int active) }
* stash over-ride to indicate we've been here diff --git a/drivers/
--- a/drivers/
+++ b/drivers/
@@ -826,6 +826,22 @@ void acpi_penalize_
/* sci_irq( int irq, int trigger, int polarity) { acpi_irq_ penalty) ) { TRIGGER_ LEVEL || POLARITY_ ACTIVE_ LOW) penalty[ irq] += PIRQ_PENALTY_ ISA_ALWAYS; penalty[ irq] += PIRQ_PENALTY_ PCI_USING; linux/acpi. h b/include/ linux/acpi. h index d2445fa9999f. .0b2394f61af4 100644 linux/acpi. h linux/acpi. h
+ * Penalize IRQ used by ACPI SCI. If ACPI SCI pin attributes conflict
+with
+ * PCI IRQ attributes, mark ACPI SCI as ISA_ALWAYS so it won't be use
+for
+ * PCI IRQs.
+ */
+void acpi_penalize_
+ if (irq >= 0 && irq < ARRAY_SIZE(
+ if (trigger != ACPI_MADT_
+ polarity != ACPI_MADT_
+ acpi_irq_
+ else
+ acpi_irq_
+ }
+}
+
+/*
* Over-ride default table to reserve additional IRQs for use by ISA
* e.g. acpi_irq_isa=5
* Useful for telling ACPI how not to interfere with your ISA sound card.
diff --git a/include/
--- a/include/
+++ b/include/
@@ -221,7 +221,7 @@ struct pci_dev;
int acpi_pci_irq_enable (struct pci_dev *dev); void acpi_penalize_ isa_irq( int irq, int active); sci_irq( int irq, int trigger, int polarity); irq_disable (struct pci_dev *dev);
-
+void acpi_penalize_
void acpi_pci_
extern int ec_read(u8 addr, u8 *val);
--
1.7.10.4