The ES7000 merge added a bit of code of offset the IRQ numbers. We're not too sure why; it wasn't changelogged. But it broke other systems, so this patch arranges for that code to only be activated on es7000 machines. arch/i386/kernel/dmi_scan.c | 1 + arch/i386/kernel/mpparse.c | 7 +++++-- arch/i386/mach-es7000/es7000.c | 2 -- include/asm-i386/system.h | 1 + 4 files changed, 7 insertions(+), 4 deletions(-) diff -puN arch/i386/kernel/dmi_scan.c~mpparse_es7000 arch/i386/kernel/dmi_scan.c --- 25/arch/i386/kernel/dmi_scan.c~mpparse_es7000 2003-11-21 01:30:11.000000000 -0800 +++ 25-akpm/arch/i386/kernel/dmi_scan.c 2003-11-21 01:30:11.000000000 -0800 @@ -16,6 +16,7 @@ EXPORT_SYMBOL(dmi_broken); int is_sony_vaio_laptop; int is_unsafe_smbus; +int es7000_plat = 0; struct dmi_header { diff -puN arch/i386/kernel/mpparse.c~mpparse_es7000 arch/i386/kernel/mpparse.c --- 25/arch/i386/kernel/mpparse.c~mpparse_es7000 2003-11-21 01:30:11.000000000 -0800 +++ 25-akpm/arch/i386/kernel/mpparse.c 2003-11-21 01:30:11.000000000 -0800 @@ -1129,8 +1129,11 @@ void __init mp_parse_prt (void) continue; ioapic_pin = irq - mp_ioapic_routing[ioapic].irq_start; - if (!ioapic && (irq < 16)) - irq += 16; + if (es7000_plat) { + if (!ioapic && (irq < 16)) + irq += 16; + } + /* * Avoid pin reprogramming. PRTs typically include entries * with redundant pin->irq mappings (but unique PCI devices); diff -puN arch/i386/mach-es7000/es7000.c~mpparse_es7000 arch/i386/mach-es7000/es7000.c --- 25/arch/i386/mach-es7000/es7000.c~mpparse_es7000 2003-11-21 01:30:11.000000000 -0800 +++ 25-akpm/arch/i386/mach-es7000/es7000.c 2003-11-21 01:30:11.000000000 -0800 @@ -51,8 +51,6 @@ struct mip_reg *host_reg; int mip_port; unsigned long mip_addr, host_addr; -static int es7000_plat; - /* * Parse the OEM Table */ diff -puN include/asm-i386/system.h~mpparse_es7000 include/asm-i386/system.h --- 25/include/asm-i386/system.h~mpparse_es7000 2003-11-21 01:30:11.000000000 -0800 +++ 25-akpm/include/asm-i386/system.h 2003-11-21 01:30:11.000000000 -0800 @@ -470,6 +470,7 @@ void enable_hlt(void); extern unsigned long dmi_broken; extern int is_sony_vaio_laptop; +extern int es7000_plat; #define BROKEN_ACPI_Sx 0x0001 #define BROKEN_INIT_AFTER_S1 0x0002 _