diff options
author | Len Brown <len.brown@intel.com> | 2006-12-02 02:27:46 -0500 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2006-12-02 02:27:46 -0500 |
commit | 7bdd21cef9e5dbc3d3a718c55bb3d0da024644da (patch) | |
tree | b305282c405c39a719411fb11e5b9b6fa6698e48 /arch/i386/kernel/acpi/boot.c | |
parent | 0215ffb08ce99e2bb59eca114a99499a4d06e704 (diff) |
Revert "ACPI: SCI interrupt source override"
This reverts commit 281ea49b0c294649a6de47a6f8fbe5611137726b,
which broke ACPI Interrupt source overrides that move
the SCI from one IRQ in PIC mode to another in IOAPIC mode.
If the SCI shared an interrupt line with another device,
this would result in a "irq 18: nobody cared" type failure.
http://bugzilla.kernel.org/show_bug.cgi?id=7601
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'arch/i386/kernel/acpi/boot.c')
-rw-r--r-- | arch/i386/kernel/acpi/boot.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c index d12fb97a5337..c8f96cff07c6 100644 --- a/arch/i386/kernel/acpi/boot.c +++ b/arch/i386/kernel/acpi/boot.c | |||
@@ -333,7 +333,7 @@ acpi_parse_ioapic(acpi_table_entry_header * header, const unsigned long end) | |||
333 | /* | 333 | /* |
334 | * Parse Interrupt Source Override for the ACPI SCI | 334 | * Parse Interrupt Source Override for the ACPI SCI |
335 | */ | 335 | */ |
336 | static void acpi_sci_ioapic_setup(u32 bus_irq, u32 gsi, u16 polarity, u16 trigger) | 336 | static void acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger) |
337 | { | 337 | { |
338 | if (trigger == 0) /* compatible SCI trigger is level */ | 338 | if (trigger == 0) /* compatible SCI trigger is level */ |
339 | trigger = 3; | 339 | trigger = 3; |
@@ -353,13 +353,13 @@ static void acpi_sci_ioapic_setup(u32 bus_irq, u32 gsi, u16 polarity, u16 trigge | |||
353 | * If GSI is < 16, this will update its flags, | 353 | * If GSI is < 16, this will update its flags, |
354 | * else it will create a new mp_irqs[] entry. | 354 | * else it will create a new mp_irqs[] entry. |
355 | */ | 355 | */ |
356 | mp_override_legacy_irq(bus_irq, polarity, trigger, gsi); | 356 | mp_override_legacy_irq(gsi, polarity, trigger, gsi); |
357 | 357 | ||
358 | /* | 358 | /* |
359 | * stash over-ride to indicate we've been here | 359 | * stash over-ride to indicate we've been here |
360 | * and for later update of acpi_fadt | 360 | * and for later update of acpi_fadt |
361 | */ | 361 | */ |
362 | acpi_sci_override_gsi = bus_irq; | 362 | acpi_sci_override_gsi = gsi; |
363 | return; | 363 | return; |
364 | } | 364 | } |
365 | 365 | ||
@@ -377,7 +377,7 @@ acpi_parse_int_src_ovr(acpi_table_entry_header * header, | |||
377 | acpi_table_print_madt_entry(header); | 377 | acpi_table_print_madt_entry(header); |
378 | 378 | ||
379 | if (intsrc->bus_irq == acpi_fadt.sci_int) { | 379 | if (intsrc->bus_irq == acpi_fadt.sci_int) { |
380 | acpi_sci_ioapic_setup(intsrc->bus_irq, intsrc->global_irq, | 380 | acpi_sci_ioapic_setup(intsrc->global_irq, |
381 | intsrc->flags.polarity, | 381 | intsrc->flags.polarity, |
382 | intsrc->flags.trigger); | 382 | intsrc->flags.trigger); |
383 | return 0; | 383 | return 0; |
@@ -880,7 +880,7 @@ static int __init acpi_parse_madt_ioapic_entries(void) | |||
880 | * pretend we got one so we can set the SCI flags. | 880 | * pretend we got one so we can set the SCI flags. |
881 | */ | 881 | */ |
882 | if (!acpi_sci_override_gsi) | 882 | if (!acpi_sci_override_gsi) |
883 | acpi_sci_ioapic_setup(acpi_fadt.sci_int, acpi_fadt.sci_int, 0, 0); | 883 | acpi_sci_ioapic_setup(acpi_fadt.sci_int, 0, 0); |
884 | 884 | ||
885 | /* Fill in identity legacy mapings where no override */ | 885 | /* Fill in identity legacy mapings where no override */ |
886 | mp_config_acpi_legacy_irqs(); | 886 | mp_config_acpi_legacy_irqs(); |