# This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/03/26 17:51:41-05:00 len.brown@intel.com # [ACPI] proposed fix for non-identity-mapped SCI override # http://bugme.osdl.org/show_bug.cgi?id=2366 # # arch/x86_64/kernel/acpi.c # 2004/03/26 17:50:04-05:00 len.brown@intel.com +11 -7 # proposed fix for non-identity-mapped SCI override # # arch/i386/kernel/acpi.c # 2004/03/26 17:50:04-05:00 len.brown@intel.com +11 -7 # proposed fix for non-identity-mapped SCI override # diff -Nru a/arch/i386/kernel/acpi.c b/arch/i386/kernel/acpi.c --- a/arch/i386/kernel/acpi.c Fri Mar 26 17:51:44 2004 +++ b/arch/i386/kernel/acpi.c Fri Mar 26 17:51:44 2004 @@ -220,7 +220,7 @@ * Parse Interrupt Source Override for the ACPI SCI */ static void -acpi_parse_sci_int_src_ovr(u8 bus_irq, u16 polarity, u16 trigger, u32 global_irq) +acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger) { if (trigger == 0) /* compatible SCI trigger is level */ trigger = 3; @@ -235,13 +235,18 @@ if (acpi_sci_flags.polarity) polarity = acpi_sci_flags.polarity; - mp_override_legacy_irq(bus_irq, polarity, trigger, global_irq); + /* + * mp_config_acpi_legacy_irqs() already setup IRQs < 16 + * If GSI is < 16, this will update its flags, + * else it will create a new mp_irqs[] entry. + */ + mp_override_legacy_irq(gsi, polarity, trigger, gsi); /* * stash over-ride to indicate we've been here * and for later update of acpi_fadt */ - acpi_sci_override_gsi = global_irq; + acpi_sci_override_gsi = gsi; return; } @@ -278,9 +283,8 @@ acpi_table_print_madt_entry(header); if (intsrc->bus_irq == acpi_fadt.sci_int) { - acpi_parse_sci_int_src_ovr(intsrc->bus_irq, - intsrc->flags.polarity, intsrc->flags.trigger, - intsrc->global_irq); + acpi_sci_ioapic_setup(intsrc->global_irq, + intsrc->flags.polarity, intsrc->flags.trigger); return 0; } @@ -516,7 +520,7 @@ * pretend we got one so we can set the SCI flags. */ if (!acpi_sci_override_gsi) - acpi_parse_sci_int_src_ovr(acpi_fadt.sci_int, 0, 0, acpi_fadt.sci_int); + acpi_sci_ioapic_setup(acpi_fadt.sci_int, 0, 0); result = acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src); if (result < 0) { diff -Nru a/arch/x86_64/kernel/acpi.c b/arch/x86_64/kernel/acpi.c --- a/arch/x86_64/kernel/acpi.c Fri Mar 26 17:51:44 2004 +++ b/arch/x86_64/kernel/acpi.c Fri Mar 26 17:51:44 2004 @@ -233,7 +233,7 @@ * Parse Interrupt Source Override for the ACPI SCI */ static void -acpi_parse_sci_int_src_ovr(u8 bus_irq, u16 polarity, u16 trigger, u32 global_irq) +acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger) { if (trigger == 0) /* compatible SCI trigger is level */ trigger = 3; @@ -248,13 +248,18 @@ if (acpi_sci_flags.polarity) polarity = acpi_sci_flags.polarity; - mp_override_legacy_irq(bus_irq, polarity, trigger, global_irq); + /* + * mp_config_acpi_legacy_irqs() already setup IRQs < 16 + * If GSI is < 16, this will update its flags, + * else it will create a new mp_irqs[] entry. + */ + mp_override_legacy_irq(gsi, polarity, trigger, gsi); /* * stash over-ride to indicate we've been here * and for later update of acpi_fadt */ - acpi_sci_override_gsi = global_irq; + acpi_sci_override_gsi = gsi; return; } @@ -291,9 +296,8 @@ acpi_table_print_madt_entry(header); if (intsrc->bus_irq == acpi_fadt.sci_int) { - acpi_parse_sci_int_src_ovr(intsrc->bus_irq, - intsrc->flags.polarity, intsrc->flags.trigger, - intsrc->global_irq); + acpi_sci_ioapic_setup(intsrc->global_irq, + intsrc->flags.polarity, intsrc->flags.trigger); return 0; } @@ -568,7 +572,7 @@ * pretend we got one so we can set the SCI flags. */ if (!acpi_sci_override_gsi) - acpi_parse_sci_int_src_ovr(acpi_fadt.sci_int, 0, 0, acpi_fadt.sci_int); + acpi_sci_ioapic_setup(acpi_fadt.sci_int, 0, 0); result = acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src); if (result < 0) {