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>
This commit is contained in:
Родитель
7ef36390fa
Коммит
9cd8047b46
|
@ -85,6 +85,16 @@ static void pnpacpi_parse_allocated_irqresource(struct pnp_resource_table *res,
|
|||
if (i >= PNP_MAX_IRQ)
|
||||
return;
|
||||
|
||||
#ifdef CONFIG_X86
|
||||
if (gsi < 16 && (triggering != ACPI_EDGE_SENSITIVE ||
|
||||
polarity != ACPI_ACTIVE_HIGH)) {
|
||||
pnp_warn("BIOS BUG: legacy PNP IRQ %d should be edge trigger, "
|
||||
"active high", gsi);
|
||||
triggering = ACPI_EDGE_SENSITIVE;
|
||||
polarity = ACPI_ACTIVE_HIGH;
|
||||
}
|
||||
#endif
|
||||
|
||||
res->irq_resource[i].flags = IORESOURCE_IRQ; // Also clears _UNSET flag
|
||||
res->irq_resource[i].flags |= irq_flags(triggering, polarity);
|
||||
irq = acpi_register_gsi(gsi, triggering, polarity);
|
||||
|
|
Загрузка…
Ссылка в новой задаче