--- linux-2.6.0-test3-mm1/arch/i386/kernel/acpi/boot.c.orig Sun Aug 10 14:16:32 2003 +++ linux-2.6.0-test3-mm1/arch/i386/kernel/acpi/boot.c Sun Aug 10 17:11:13 2003 @@ -39,6 +39,7 @@ #define PREFIX "ACPI: " extern int acpi_disabled; +extern int acpi_ioapic_disabled; /* -------------------------------------------------------------------------- Boot-time Configuration @@ -386,46 +387,51 @@ * -------- */ + if (!acpi_ioapic_disabled) { + + result = acpi_table_parse_madt(ACPI_MADT_IOAPIC, + acpi_parse_ioapic); + if (!result) { + printk(KERN_ERR PREFIX "No IOAPIC entries present\n"); + return -ENODEV; + } + else if (result < 0) { + printk(KERN_ERR PREFIX "Error parsing IOAPIC entry\n"); + return result; + } - result = acpi_table_parse_madt(ACPI_MADT_IOAPIC, acpi_parse_ioapic); - if (!result) { - printk(KERN_ERR PREFIX "No IOAPIC entries present\n"); - return -ENODEV; - } - else if (result < 0) { - printk(KERN_ERR PREFIX "Error parsing IOAPIC entry\n"); - return result; - } + /* Build a default routing table for legacy (ISA) interrupts. */ + mp_config_acpi_legacy_irqs(); - /* Build a default routing table for legacy (ISA) interrupts. */ - mp_config_acpi_legacy_irqs(); + result = acpi_table_parse_madt(ACPI_MADT_INT_SRC_OVR, + acpi_parse_int_src_ovr); + if (result < 0) { + printk(KERN_ERR PREFIX + "Error parsing interrupt source overrides entry\n"); + /* TBD: Cleanup to allow fallback to MPS */ + return result; + } - result = acpi_table_parse_madt(ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr); - if (result < 0) { - printk(KERN_ERR PREFIX "Error parsing interrupt source overrides entry\n"); - /* TBD: Cleanup to allow fallback to MPS */ - return result; - } + result = acpi_table_parse_madt(ACPI_MADT_NMI_SRC, + acpi_parse_nmi_src); + if (result < 0) { + printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n"); + /* TBD: Cleanup to allow fallback to MPS */ + return result; + } - result = acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src); - if (result < 0) { - printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n"); - /* TBD: Cleanup to allow fallback to MPS */ - return result; - } + acpi_irq_model = ACPI_IRQ_MODEL_IOAPIC; + acpi_ioapic = 1; - acpi_irq_model = ACPI_IRQ_MODEL_IOAPIC; - - acpi_ioapic = 1; - -#endif /*!CONFIG_ACPI_HT_ONLY*/ -#endif /*CONFIG_X86_IO_APIC*/ #ifdef CONFIG_X86_LOCAL_APIC - if (acpi_lapic && acpi_ioapic) { smp_found_config = 1; clustered_apic_check(); - } #endif + + } + +#endif /*!CONFIG_ACPI_HT_ONLY*/ +#endif /*CONFIG_X86_IO_APIC*/ return 0; } --- linux-2.6.0-test3-mm1/arch/i386/kernel/setup.c.orig Sun Aug 10 14:17:08 2003 +++ linux-2.6.0-test3-mm1/arch/i386/kernel/setup.c Sun Aug 10 17:00:04 2003 @@ -69,6 +69,8 @@ #endif EXPORT_SYMBOL(acpi_disabled); +int acpi_ioapic_disabled = 0; + int MCA_bus; /* for MCA, but anyone else can use it if they want */ unsigned int machine_id; @@ -523,6 +525,10 @@ /* "acpismp=force" turns on ACPI again */ if (c == ' ' && !memcmp(from, "acpismp=force", 13)) acpi_disabled = 0; + + /* "pci=noacpi" disables ACPI table parsing for interrupt routing */ + if (c == ' ' && !memcmp(from, "pci=noacpi", 10)) + acpi_ioapic_disabled = 1; /* * highmem=size forces highmem to be exactly 'size' bytes.