From: Tom Rini OK. One thing which __setup functions are allowed to do, which __early_param are not is to eat the command line (typically foo = strchr(str, ','); *foo++ = 0). So I've audited all of the converts of __setup to __early_param, and got the following: - Drop the hunk of early-param-i386.patch that changes drivers/pci/pci.c - This is a fix for console= which inadvertantly does ... strcpy(name, str, sizeof(name)) ... ... options = strchr(str, ',') ... *options++ = 0; ... fiddle with name ... - Apply the following to get back pci=noacpi being parsed early. I do not know if this option must be called this early, but it was before the early_param stuff, so I assume it was done with reason (tested, and apci=force (needed on my testbox) pci=noacpi works as expected): --- 25-akpm/arch/i386/kernel/setup.c | 8 ++++++++ 1 files changed, 8 insertions(+) diff -puN arch/i386/kernel/setup.c~early-param-pci-fix arch/i386/kernel/setup.c --- 25/arch/i386/kernel/setup.c~early-param-pci-fix 2004-03-30 19:49:05.364123112 -0800 +++ 25-akpm/arch/i386/kernel/setup.c 2004-03-30 19:49:05.367122656 -0800 @@ -603,6 +603,14 @@ static int __init early_acpi(char *from) } __early_param("acpi=", early_acpi); +static int __init early_pci_noacpi(char *ign) +{ + acpi_noirq_set(); + + return 0; +} +__early_param("pci=noacpi", early_pci_noacpi); + static int __init early_acpi_sci(char *from) { if (!memcmp(from, "edge", 4)) _