diff options
author | Krzysztof Oledzki <olel@ans.pl> | 2007-10-17 02:31:08 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-17 11:43:04 -0400 |
commit | 9cd8047b463f213c294f756119ac353312e7a152 (patch) | |
tree | 2e5440895a254d631b2a24fcf61e48ec9fe4707c | |
parent | 7ef36390fabe2168fe31f245e49eb4e5f3762622 (diff) |
Fix very high interrupt rate for IRQ8 (rtc) unless pnpacpi=off
Workaround for broken systems with BIOS that makes RTC interrupt level
triggered and/or active low.
See http://bugzilla.kernel.org/show_bug.cgi?id=5243
Based on the patch from Shaohua Li <shaohua.li@intel.com>
Signed-off-by: Krzysztof Piotr Oledzki <ole@ans.pl>
Cc: "Li, Shaohua" <shaohua.li@intel.com>
Cc: Bjorn Helgaas <bjorn.helgaas@hp.com>
Cc: Andi Kleen <ak@suse.de>
Cc: Adam Belay <ambx1@neo.rr.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | drivers/pnp/pnpacpi/rsparser.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/pnp/pnpacpi/rsparser.c b/drivers/pnp/pnpacpi/rsparser.c index 0e3b8d0ff06b..cd0a204d96d1 100644 --- a/drivers/pnp/pnpacpi/rsparser.c +++ b/drivers/pnp/pnpacpi/rsparser.c | |||
@@ -85,6 +85,16 @@ static void pnpacpi_parse_allocated_irqresource(struct pnp_resource_table *res, | |||
85 | if (i >= PNP_MAX_IRQ) | 85 | if (i >= PNP_MAX_IRQ) |
86 | return; | 86 | return; |
87 | 87 | ||
88 | #ifdef CONFIG_X86 | ||
89 | if (gsi < 16 && (triggering != ACPI_EDGE_SENSITIVE || | ||
90 | polarity != ACPI_ACTIVE_HIGH)) { | ||
91 | pnp_warn("BIOS BUG: legacy PNP IRQ %d should be edge trigger, " | ||
92 | "active high", gsi); | ||
93 | triggering = ACPI_EDGE_SENSITIVE; | ||
94 | polarity = ACPI_ACTIVE_HIGH; | ||
95 | } | ||
96 | #endif | ||
97 | |||
88 | res->irq_resource[i].flags = IORESOURCE_IRQ; // Also clears _UNSET flag | 98 | res->irq_resource[i].flags = IORESOURCE_IRQ; // Also clears _UNSET flag |
89 | res->irq_resource[i].flags |= irq_flags(triggering, polarity); | 99 | res->irq_resource[i].flags |= irq_flags(triggering, polarity); |
90 | irq = acpi_register_gsi(gsi, triggering, polarity); | 100 | irq = acpi_register_gsi(gsi, triggering, polarity); |