PATCH: Allow over-ride of smp_found_cfg with kernel cmd-line option.

From: Ben Greear
Date: Thu Feb 05 2009 - 14:48:57 EST


Allow user to keep smp_found_cfg set to 1 even if MADT
cannot be parsed. This works around funky BIOS on FWA-7304
(VIA CN700 chipset) system, and possibly other systems as well.
Without this override, performance drops by around 15% on
network throughput tests on this system.

This is based on 2.6.29-rc3

Signed-Off-By: Ben Greear <greearb@xxxxxxxxxxxxxxx>


Thanks,
Ben

--
Ben Greear <greearb@xxxxxxxxxxxxxxx>
Candela Technologies Inc http://www.candelatech.com

diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index d37593c..e96bf19 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -87,6 +87,7 @@ u8 acpi_sci_flags __initdata;
int acpi_sci_override_gsi __initdata;
int acpi_skip_timer_override __initdata;
int acpi_use_timer_override __initdata;
+int force_smp_found_cfg __initdata;

#ifdef CONFIG_X86_LOCAL_APIC
static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE;
@@ -1335,6 +1336,14 @@ static void __init early_acpi_process_madt(void)
#endif
}

+static int __init parse_force_smp_found_cfg(char *arg)
+{
+ force_smp_found_cfg = 1;
+ return 0;
+}
+early_param("force_smp_found_cfg", parse_force_smp_found_cfg);
+
+
static void __init acpi_process_madt(void)
{
#ifdef CONFIG_X86_LOCAL_APIC
@@ -1381,9 +1390,14 @@ static void __init acpi_process_madt(void)
* Boot with "acpi=off" to use MPS on such a system.
*/
if (smp_found_config) {
- printk(KERN_WARNING PREFIX
- "No APIC-table, disabling MPS\n");
- smp_found_config = 0;
+ if (force_smp_found_cfg)
+ printk(KERN_WARNING PREFIX
+ "No APIC-table, wanted to disable MPS, but will not\n due to force_smp_found_cfg=1\n");
+ else {
+ printk(KERN_WARNING PREFIX
+ "No APIC-table, disabling MPS. Use force_smp_found_cfg=1 to override\n");
+ smp_found_config = 0;
+ }
}
}