diff options
| author | Feng Tang <feng.tang@intel.com> | 2012-06-04 03:00:04 -0400 |
|---|---|---|
| committer | Luis Henriques <luis.henriques@canonical.com> | 2012-07-23 05:50:29 -0400 |
| commit | 02f6e2ae64562d881c48dd772819601f6b1899f2 (patch) | |
| tree | e0c9edda60a947e6b4b04ca5d316f898ef1f200b /arch/x86/kernel | |
| parent | 216902cdfcfd18bcdb29dc8df3cbf88bbc9349c6 (diff) | |
ACPI: Make acpi_skip_timer_override cover all source_irq==0 cases
BugLink: http://bugs.launchpad.net/bugs/1025406
commit ae10ccdc3093486f8c2369d227583f9d79f628e5 upstream.
Currently when acpi_skip_timer_override is set, it only cover the
(source_irq == 0 && global_irq == 2) cases. While there is also
platform which need use this option and its global_irq is not 2.
This patch will extend acpi_skip_timer_override to cover all
timer overriding cases as long as the source irq is 0.
This is the first part of a fix to kernel bug bugzilla 40002:
"IRQ 0 assigned to VGA"
https://bugzilla.kernel.org/show_bug.cgi?id=40002
Reported-and-tested-by: Szymon Kowalczyk <fazerxlo@o2.pl>
Signed-off-by: Feng Tang <feng.tang@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
Diffstat (limited to 'arch/x86/kernel')
| -rw-r--r-- | arch/x86/kernel/acpi/boot.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 8da75ff8650..9650bccc77b 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c | |||
| @@ -416,12 +416,14 @@ acpi_parse_int_src_ovr(struct acpi_subtable_header * header, | |||
| 416 | return 0; | 416 | return 0; |
| 417 | } | 417 | } |
| 418 | 418 | ||
| 419 | if (intsrc->source_irq == 0 && intsrc->global_irq == 2) { | 419 | if (intsrc->source_irq == 0) { |
| 420 | if (acpi_skip_timer_override) { | 420 | if (acpi_skip_timer_override) { |
| 421 | printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n"); | 421 | printk(PREFIX "BIOS IRQ0 override ignored.\n"); |
| 422 | return 0; | 422 | return 0; |
| 423 | } | 423 | } |
| 424 | if (acpi_fix_pin2_polarity && (intsrc->inti_flags & ACPI_MADT_POLARITY_MASK)) { | 424 | |
| 425 | if ((intsrc->global_irq == 2) && acpi_fix_pin2_polarity | ||
| 426 | && (intsrc->inti_flags & ACPI_MADT_POLARITY_MASK)) { | ||
| 425 | intsrc->inti_flags &= ~ACPI_MADT_POLARITY_MASK; | 427 | intsrc->inti_flags &= ~ACPI_MADT_POLARITY_MASK; |
| 426 | printk(PREFIX "BIOS IRQ0 pin2 override: forcing polarity to high active.\n"); | 428 | printk(PREFIX "BIOS IRQ0 pin2 override: forcing polarity to high active.\n"); |
| 427 | } | 429 | } |
| @@ -1327,7 +1329,7 @@ static int __init dmi_disable_acpi(const struct dmi_system_id *d) | |||
| 1327 | } | 1329 | } |
| 1328 | 1330 | ||
| 1329 | /* | 1331 | /* |
| 1330 | * Force ignoring BIOS IRQ0 pin2 override | 1332 | * Force ignoring BIOS IRQ0 override |
| 1331 | */ | 1333 | */ |
| 1332 | static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d) | 1334 | static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d) |
| 1333 | { | 1335 | { |
| @@ -1337,7 +1339,7 @@ static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d) | |||
| 1337 | */ | 1339 | */ |
| 1338 | if (!acpi_skip_timer_override) { | 1340 | if (!acpi_skip_timer_override) { |
| 1339 | WARN(1, KERN_ERR "ati_ixp4x0 quirk not complete.\n"); | 1341 | WARN(1, KERN_ERR "ati_ixp4x0 quirk not complete.\n"); |
| 1340 | pr_notice("%s detected: Ignoring BIOS IRQ0 pin2 override\n", | 1342 | pr_notice("%s detected: Ignoring BIOS IRQ0 override\n", |
| 1341 | d->ident); | 1343 | d->ident); |
| 1342 | acpi_skip_timer_override = 1; | 1344 | acpi_skip_timer_override = 1; |
| 1343 | } | 1345 | } |
| @@ -1431,7 +1433,7 @@ static struct dmi_system_id __initdata acpi_dmi_table_late[] = { | |||
| 1431 | * is enabled. This input is incorrectly designated the | 1433 | * is enabled. This input is incorrectly designated the |
| 1432 | * ISA IRQ 0 via an interrupt source override even though | 1434 | * ISA IRQ 0 via an interrupt source override even though |
| 1433 | * it is wired to the output of the master 8259A and INTIN0 | 1435 | * it is wired to the output of the master 8259A and INTIN0 |
| 1434 | * is not connected at all. Force ignoring BIOS IRQ0 pin2 | 1436 | * is not connected at all. Force ignoring BIOS IRQ0 |
| 1435 | * override in that cases. | 1437 | * override in that cases. |
| 1436 | */ | 1438 | */ |
| 1437 | { | 1439 | { |
