http://linux-acpi.bkbits.net/linux-acpi-test-2.6.6 len.brown@intel.com|ChangeSet|20040421011953|64619 len.brown # This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/04/21 00:27:16-07:00 akpm@bix.(none) # Merge http://linux-acpi.bkbits.net/linux-acpi-test-2.6.6 # into bix.(none):/usr/src/bk-acpi # # arch/x86_64/kernel/mpparse.c # 2004/04/21 00:27:13-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/04/20 21:04:53-04:00 len.brown@intel.com # Merge intel.com:/home/lenb/src/linux-acpi-test-2.6.5 # into intel.com:/home/lenb/src/linux-acpi-test-2.6.6 # # arch/x86_64/kernel/mpparse.c # 2004/04/20 21:04:48-04:00 len.brown@intel.com +0 -0 # Auto merged # # ChangeSet # 2004/04/20 20:55:53-04:00 len.brown@intel.com # ACPI] Delete IRQ2 "cascade" in ACPI IOAPIC mode # no such concept exists in ACPI, frees IRQ2 for use. # # arch/x86_64/kernel/i8259.c # 2004/04/20 20:55:12-04:00 len.brown@intel.com +3 -1 # [ACPI] Delete IRQ2 "cascade" in ACPI IOAPIC mode # # arch/i386/mach-voyager/setup.c # 2004/04/20 20:55:12-04:00 len.brown@intel.com +3 -1 # [ACPI] Delete IRQ2 "cascade" in ACPI IOAPIC mode # # arch/i386/mach-es7000/setup.c # 2004/04/20 20:55:12-04:00 len.brown@intel.com +4 -3 # [ACPI] Delete IRQ2 "cascade" in ACPI IOAPIC mode # # arch/i386/mach-default/setup.c # 2004/04/20 20:55:12-04:00 len.brown@intel.com +3 -1 # [ACPI] Delete IRQ2 "cascade" in ACPI IOAPIC mode # # ChangeSet # 2004/04/20 20:54:14-04:00 len.brown@intel.com # [ACPI] enhance intr-src-override parsing to handle ES7000 # http://bugme.osdl.org/show_bug.cgi?id=2520 # # arch/x86_64/kernel/mpparse.c # 2004/04/20 20:54:03-04:00 len.brown@intel.com +15 -22 # [ACPI] process interrupt source over-rides before legacy identity mappings # # arch/i386/kernel/mpparse.c # 2004/04/20 20:54:03-04:00 len.brown@intel.com +13 -22 # [ACPI] process interrupt source over-rides before legacy identity mappings # # arch/i386/kernel/acpi/boot.c # 2004/04/20 20:54:03-04:00 len.brown@intel.com +3 -3 # [ACPI] process interrupt source over-rides before legacy identity mappings # # ChangeSet # 2004/04/16 20:13:39-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # MAINTAINERS # 2004/04/16 20:13:37-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/04/16 22:07:00-04:00 len.brown@intel.com # Merge intel.com:/home/lenb/src/linux-acpi-test-2.6.5 # into intel.com:/home/lenb/src/linux-acpi-test-2.6.6 # # arch/i386/pci/irq.c # 2004/04/16 22:06:57-04:00 len.brown@intel.com +0 -0 # Auto merged # # arch/i386/kernel/dmi_scan.c # 2004/04/16 22:06:57-04:00 len.brown@intel.com +0 -0 # Auto merged # # ChangeSet # 2004/04/16 22:03:45-04:00 len.brown@intel.com # [ACPI] enable 440GX PIRQ router workaround # # arch/i386/pci/irq.c # 2004/04/16 22:03:06-04:00 len.brown@intel.com +1 -4 # enable 440GX PIRQ workaround # # arch/i386/kernel/dmi_scan.c # 2004/04/16 22:03:06-04:00 len.brown@intel.com +0 -70 # delete broken_pirq() -- it is now handled in pirq router code. # # ChangeSet # 2004/04/14 13:15:03-04:00 len.brown@intel.com # [ACPI] fix x86_64 mis-merge # # arch/x86_64/kernel/Makefile # 2004/04/14 13:08:40-04:00 len.brown@intel.com +1 -1 # fix mis-merge # # ChangeSet # 2004/04/13 23:21:22-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # arch/x86_64/kernel/setup.c # 2004/04/13 23:21:20-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/04/13 17:01:02-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # MAINTAINERS # 2004/04/13 17:00:59-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/04/12 16:55:52-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # arch/x86_64/kernel/setup.c # 2004/04/12 16:55:49-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/x86_64/kernel/mpparse.c # 2004/04/12 16:55:49-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/setup.c # 2004/04/12 16:55:49-07:00 akpm@bix.(none) +0 -0 # Auto merged # # MAINTAINERS # 2004/04/12 16:55:49-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/04/02 11:16:37-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # arch/i386/kernel/setup.c # 2004/04/02 11:16:34-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/03/29 17:50:22-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # MAINTAINERS # 2004/03/29 17:50:19-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/03/23 02:57:13-08:00 akpm@bix.(none) # Merge http://linux-acpi.bkbits.net/linux-acpi-test-2.6.5 # into bix.(none):/usr/src/bk-acpi # # arch/x86_64/kernel/setup.c # 2004/03/23 02:57:10-08:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/x86_64/kernel/mpparse.c # 2004/03/23 02:57:10-08:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/setup.c # 2004/03/23 02:57:10-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/03/20 23:31:09-08:00 akpm@bix.(none) # Merge http://linux-acpi.bkbits.net/linux-acpi-test-2.6.5 # into bix.(none):/usr/src/bk-acpi # # arch/x86_64/kernel/setup.c # 2004/03/20 23:31:06-08:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/x86_64/kernel/mpparse.c # 2004/03/20 23:31:06-08:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/setup.c # 2004/03/20 23:31:06-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/03/20 13:11:13-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # arch/x86_64/kernel/setup.c # 2004/03/20 13:11:10-08:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/x86_64/kernel/mpparse.c # 2004/03/20 13:11:10-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/03/19 09:57:54-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # arch/i386/kernel/setup.c # 2004/03/19 09:57:51-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/03/17 10:56:26-08:00 akpm@bix.(none) # Merge http://linux-acpi.bkbits.net/linux-acpi-test-2.6.5 # into bix.(none):/usr/src/bk-acpi # # arch/x86_64/kernel/setup.c # 2004/03/17 10:56:23-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/03/16 20:07:13-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # MAINTAINERS # 2004/03/16 20:07:06-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/03/14 02:35:58-08:00 akpm@bix.(none) # Merge http://linux-acpi.bkbits.net/linux-acpi-test-2.6.5 # into bix.(none):/usr/src/bk-acpi # # MAINTAINERS # 2004/03/14 02:35:43-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/03/12 10:33:53-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # MAINTAINERS # 2004/03/12 10:33:46-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/03/12 00:33:17-08:00 akpm@bix.(none) # Merge http://linux-acpi.bkbits.net/linux-acpi-test-2.6.4 # into bix.(none):/usr/src/bk-acpi # # MAINTAINERS # 2004/03/12 00:33:04-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/03/06 12:42:53-08:00 akpm@mnm.(none) # Merge mnm.(none):/usr/src/bk25 into mnm.(none):/usr/src/bk-acpi # # MAINTAINERS # 2004/03/06 12:42:46-08:00 akpm@mnm.(none) +0 -0 # Auto merged # # ChangeSet # 2004/03/05 15:03:13-08:00 akpm@mnm.(none) # Merge http://linux-acpi.bkbits.net/linux-acpi-test-2.6.4 # into mnm.(none):/usr/src/bk-acpi # # MAINTAINERS # 2004/03/05 15:03:06-08:00 akpm@mnm.(none) +0 -0 # Auto merged # # ChangeSet # 2004/03/02 12:01:50-08:00 akpm@mnm.(none) # Merge mnm.(none):/usr/src/bk25 into mnm.(none):/usr/src/bk-acpi # # MAINTAINERS # 2004/03/02 12:01:43-08:00 akpm@mnm.(none) +0 -0 # Auto merged # diff -Nru a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c --- a/arch/i386/kernel/acpi/boot.c Wed Apr 21 00:28:02 2004 +++ b/arch/i386/kernel/acpi/boot.c Wed Apr 21 00:28:02 2004 @@ -653,9 +653,6 @@ return count; } - /* Build a default routing table for legacy (ISA) interrupts. */ - mp_config_acpi_legacy_irqs(); - count = acpi_table_parse_madt(ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr, NR_IRQ_VECTORS); if (count < 0) { printk(KERN_ERR PREFIX "Error parsing interrupt source overrides entry\n"); @@ -669,6 +666,9 @@ */ if (!acpi_sci_override_gsi) acpi_sci_ioapic_setup(acpi_fadt.sci_int, 0, 0); + + /* Fill in identity legacy mapings where no override */ + mp_config_acpi_legacy_irqs(); count = acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src, NR_IRQ_VECTORS); if (count < 0) { diff -Nru a/arch/i386/kernel/dmi_scan.c b/arch/i386/kernel/dmi_scan.c --- a/arch/i386/kernel/dmi_scan.c Wed Apr 21 00:28:02 2004 +++ b/arch/i386/kernel/dmi_scan.c Wed Apr 21 00:28:02 2004 @@ -413,30 +413,6 @@ } /* - * The Intel 440GX hall of shame. - * - * On many (all we have checked) of these boxes the $PIRQ table is wrong. - * The MP1.4 table is right however and so SMP kernels tend to work. - */ - -static __init int broken_pirq(struct dmi_blacklist *d) -{ - - printk(KERN_INFO " *** Possibly defective BIOS detected (irqtable)\n"); - printk(KERN_INFO " *** Many BIOSes matching this signature have incorrect IRQ routing tables.\n"); - printk(KERN_INFO " *** If you see IRQ problems, in particular SCSI resets and hangs at boot\n"); - printk(KERN_INFO " *** contact your hardware vendor and ask about updates.\n"); - printk(KERN_INFO " *** Building an SMP kernel may evade the bug some of the time.\n"); -#ifdef CONFIG_X86_IO_APIC - { - extern int skip_ioapic_setup; - skip_ioapic_setup = 0; - } -#endif - return 0; -} - -/* * ASUS K7V-RM has broken ACPI table defining sleep modes */ @@ -815,52 +791,6 @@ NO_MATCH, NO_MATCH } }, - /* Problem Intel 440GX bioses */ - - { broken_pirq, "SABR1 Bios", { /* Bad $PIR */ - MATCH(DMI_BIOS_VENDOR, "Intel Corporation"), - MATCH(DMI_BIOS_VERSION,"SABR1"), - NO_MATCH, NO_MATCH - } }, - { broken_pirq, "l44GX Bios", { /* Bad $PIR */ - MATCH(DMI_BIOS_VENDOR, "Intel Corporation"), - MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0094.P10"), - NO_MATCH, NO_MATCH - } }, - { broken_pirq, "l44GX Bios", { /* Bad $PIR */ - MATCH(DMI_BIOS_VENDOR, "Intel Corporation"), - MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0115.P12"), - NO_MATCH, NO_MATCH - } }, - { broken_pirq, "l44GX Bios", { /* Bad $PIR */ - MATCH(DMI_BIOS_VENDOR, "Intel Corporation"), - MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0120.P12"), - NO_MATCH, NO_MATCH - } }, - { broken_pirq, "l44GX Bios", { /* Bad $PIR */ - MATCH(DMI_BIOS_VENDOR, "Intel Corporation"), - MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0125.P13"), - NO_MATCH, NO_MATCH - } }, - { broken_pirq, "l44GX Bios", { /* Bad $PIR */ - MATCH(DMI_BIOS_VENDOR, "Intel Corporation"), - MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0066.P07.9906041405"), - NO_MATCH, NO_MATCH - } }, - - { broken_pirq, "IBM xseries 370", { /* Bad $PIR */ - MATCH(DMI_BIOS_VENDOR, "IBM"), - MATCH(DMI_BIOS_VERSION,"MMKT33AUS"), - NO_MATCH, NO_MATCH - } }, - - /* Intel in disguise - In this case they can't hide and they don't run - too well either... */ - { broken_pirq, "Dell PowerEdge 8450", { /* Bad $PIR */ - MATCH(DMI_PRODUCT_NAME, "Dell PowerEdge 8450"), - NO_MATCH, NO_MATCH, NO_MATCH - } }, - { broken_acpi_Sx, "ASUS K7V-RM", { /* Bad ACPI Sx table */ MATCH(DMI_BIOS_VERSION,"ASUS K7V-RM ACPI BIOS Revision 1003A"), MATCH(DMI_BOARD_NAME, ""), diff -Nru a/arch/i386/kernel/mpparse.c b/arch/i386/kernel/mpparse.c --- a/arch/i386/kernel/mpparse.c Wed Apr 21 00:28:02 2004 +++ b/arch/i386/kernel/mpparse.c Wed Apr 21 00:28:02 2004 @@ -929,8 +929,6 @@ u32 gsi) { struct mpc_config_intsrc intsrc; - int i = 0; - int found = 0; int ioapic = -1; int pin = -1; @@ -963,23 +961,9 @@ (intsrc.mpc_irqflag >> 2) & 3, intsrc.mpc_srcbus, intsrc.mpc_srcbusirq, intsrc.mpc_dstapic, intsrc.mpc_dstirq); - /* - * If an existing [IOAPIC.PIN -> IRQ] routing entry exists we override it. - * Otherwise create a new entry (e.g. gsi == 2). - */ - for (i = 0; i < mp_irq_entries; i++) { - if ((mp_irqs[i].mpc_srcbus == intsrc.mpc_srcbus) - && (mp_irqs[i].mpc_srcbusirq == intsrc.mpc_srcbusirq)) { - mp_irqs[i] = intsrc; - found = 1; - break; - } - } - if (!found) { - mp_irqs[mp_irq_entries] = intsrc; - if (++mp_irq_entries == MAX_IRQ_SOURCES) - panic("Max # of irq sources exceeded!\n"); - } + mp_irqs[mp_irq_entries] = intsrc; + if (++mp_irq_entries == MAX_IRQ_SOURCES) + panic("Max # of irq sources exceeded!\n"); return; } @@ -1010,13 +994,20 @@ intsrc.mpc_dstapic = mp_ioapics[ioapic].mpc_apicid; /* - * Use the default configuration for the IRQs 0-15. These may be + * Use the default configuration for the IRQs 0-15. Unless * overriden by (MADT) interrupt source override entries. */ for (i = 0; i < 16; i++) { + int idx; + + for (idx = 0; idx < mp_irq_entries; idx++) + if (mp_irqs[idx].mpc_srcbus == MP_ISA_BUS && + (mp_irqs[idx].mpc_srcbusirq == i || + mp_irqs[idx].mpc_dstirq == i)) + break; - if (i == 2) - continue; /* Don't connect IRQ2 */ + if (idx != mp_irq_entries) + continue; /* IRQ already used */ intsrc.mpc_irqtype = mp_INT; intsrc.mpc_srcbusirq = i; /* Identity mapped */ diff -Nru a/arch/i386/mach-default/setup.c b/arch/i386/mach-default/setup.c --- a/arch/i386/mach-default/setup.c Wed Apr 21 00:28:02 2004 +++ b/arch/i386/mach-default/setup.c Wed Apr 21 00:28:02 2004 @@ -7,6 +7,7 @@ #include #include #include +#include #include /** @@ -43,7 +44,8 @@ apic_intr_init(); #endif - setup_irq(2, &irq2); + if (!acpi_ioapic) + setup_irq(2, &irq2); } /** diff -Nru a/arch/i386/mach-es7000/setup.c b/arch/i386/mach-es7000/setup.c --- a/arch/i386/mach-es7000/setup.c Wed Apr 21 00:28:02 2004 +++ b/arch/i386/mach-es7000/setup.c Wed Apr 21 00:28:02 2004 @@ -7,6 +7,7 @@ #include #include #include +#include #include /** @@ -17,8 +18,7 @@ * the "ordinary" interrupt call gates. For legacy reasons, the ISA * interrupts should be initialised here if the machine emulates a PC * in any way. - **/ -void __init pre_intr_init_hook(void) + **/void __init pre_intr_init_hook(void) { init_ISA_irqs(); } @@ -43,7 +43,8 @@ apic_intr_init(); #endif - setup_irq(2, &irq2); + if (!acpi_ioapic) + setup_irq(2, &irq2); } /** diff -Nru a/arch/i386/mach-voyager/setup.c b/arch/i386/mach-voyager/setup.c --- a/arch/i386/mach-voyager/setup.c Wed Apr 21 00:28:02 2004 +++ b/arch/i386/mach-voyager/setup.c Wed Apr 21 00:28:02 2004 @@ -6,6 +6,7 @@ #include #include #include +#include #include void __init pre_intr_init_hook(void) @@ -24,7 +25,8 @@ smp_intr_init(); #endif - setup_irq(2, &irq2); + if (!acpi_ioapic) + setup_irq(2, &irq2); } void __init pre_setup_arch_hook(void) diff -Nru a/arch/i386/pci/irq.c b/arch/i386/pci/irq.c --- a/arch/i386/pci/irq.c Wed Apr 21 00:28:02 2004 +++ b/arch/i386/pci/irq.c Wed Apr 21 00:28:02 2004 @@ -453,15 +453,12 @@ static __init int intel_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) { -#if 0 /* Let's see what chip this is supposed to be ... */ - /* We must not touch 440GX even if we have tables. 440GX has - different IRQ routing weirdness */ + /* 440GX has a proprietary PIRQ router -- don't use it */ if ( pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443GX_0, NULL) || pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443GX_2, NULL)) return 0; -#endif switch(device) { diff -Nru a/arch/x86_64/kernel/Makefile b/arch/x86_64/kernel/Makefile --- a/arch/x86_64/kernel/Makefile Wed Apr 21 00:28:02 2004 +++ b/arch/x86_64/kernel/Makefile Wed Apr 21 00:28:02 2004 @@ -8,7 +8,7 @@ ptrace.o i8259.o ioport.o ldt.o setup.o time.o sys_x86_64.o \ x8664_ksyms.o i387.o syscall.o vsyscall.o \ setup64.o bootflag.o e820.o reboot.o warmreboot.o -obj-y += mce.o acpi/ +obj-y += mce.o obj-$(CONFIG_MTRR) += ../../i386/kernel/cpu/mtrr/ obj-$(CONFIG_ACPI_BOOT) += acpi/ diff -Nru a/arch/x86_64/kernel/i8259.c b/arch/x86_64/kernel/i8259.c --- a/arch/x86_64/kernel/i8259.c Wed Apr 21 00:28:02 2004 +++ b/arch/x86_64/kernel/i8259.c Wed Apr 21 00:28:02 2004 @@ -13,6 +13,7 @@ #include #include +#include #include #include #include @@ -490,5 +491,6 @@ */ setup_timer(); - setup_irq(2, &irq2); + if (!acpi_ioapic) + setup_irq(2, &irq2); } diff -Nru a/arch/x86_64/kernel/mpparse.c b/arch/x86_64/kernel/mpparse.c --- a/arch/x86_64/kernel/mpparse.c Wed Apr 21 00:28:02 2004 +++ b/arch/x86_64/kernel/mpparse.c Wed Apr 21 00:28:02 2004 @@ -784,8 +784,6 @@ u32 gsi) { struct mpc_config_intsrc intsrc; - int i = 0; - int found = 0; int ioapic = -1; int pin = -1; @@ -818,23 +816,9 @@ (intsrc.mpc_irqflag >> 2) & 3, intsrc.mpc_srcbus, intsrc.mpc_srcbusirq, intsrc.mpc_dstapic, intsrc.mpc_dstirq); - /* - * If an existing [IOAPIC.PIN -> IRQ] routing entry exists we override it. - * Otherwise create a new entry (e.g. gsi == 2). - */ - for (i = 0; i < mp_irq_entries; i++) { - if ((mp_irqs[i].mpc_srcbus == intsrc.mpc_srcbus) - && (mp_irqs[i].mpc_srcbusirq == intsrc.mpc_srcbusirq)) { - mp_irqs[i] = intsrc; - found = 1; - break; - } - } - if (!found) { - mp_irqs[mp_irq_entries] = intsrc; - if (++mp_irq_entries == MAX_IRQ_SOURCES) - panic("Max # of irq sources exceeded!\n"); - } + mp_irqs[mp_irq_entries] = intsrc; + if (++mp_irq_entries == MAX_IRQ_SOURCES) + panic("Max # of irq sources exceeded!\n"); return; } @@ -865,13 +849,22 @@ intsrc.mpc_dstapic = mp_ioapics[ioapic].mpc_apicid; /* - * Use the default configuration for the IRQs 0-15. These may be + * Use the default configuration for the IRQs 0-15. Unless * overridden by (MADT) interrupt source override entries. */ for (i = 0; i < 16; i++) { + int idx; - if (i == 2) - continue; /* Don't connect IRQ2 */ + for (idx = 0; idx < mp_irq_entries; idx++) + if (mp_irqs[idx].mpc_srcbus == MP_ISA_BUS && + (mp_irqs[idx].mpc_srcbusirq == i || + mp_irqs[idx].mpc_dstirq == i)) + break; + + if (idx != mp_irq_entries) { + printk(KERN_DEBUG "ACPI: IRQ%d used by override.\n", i); + continue; /* IRQ already used */ + } intsrc.mpc_irqtype = mp_INT; intsrc.mpc_srcbusirq = i; /* Identity mapped */