aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86_64/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/kernel')
-rw-r--r--arch/x86_64/kernel/setup.c47
1 files changed, 25 insertions, 22 deletions
diff --git a/arch/x86_64/kernel/setup.c b/arch/x86_64/kernel/setup.c
index 6ca07eaa26db..01e2de4d2540 100644
--- a/arch/x86_64/kernel/setup.c
+++ b/arch/x86_64/kernel/setup.c
@@ -46,6 +46,7 @@
46#include <linux/cpufreq.h> 46#include <linux/cpufreq.h>
47#include <linux/dmi.h> 47#include <linux/dmi.h>
48#include <linux/dma-mapping.h> 48#include <linux/dma-mapping.h>
49#include <linux/ctype.h>
49 50
50#include <asm/mtrr.h> 51#include <asm/mtrr.h>
51#include <asm/uaccess.h> 52#include <asm/uaccess.h>
@@ -270,6 +271,13 @@ static void __init probe_roms(void)
270 } 271 }
271} 272}
272 273
274/* Check for full argument with no trailing characters */
275static int fullarg(char *p, char *arg)
276{
277 int l = strlen(arg);
278 return !memcmp(p, arg, l) && (p[l] == 0 || isspace(p[l]));
279}
280
273static __init void parse_cmdline_early (char ** cmdline_p) 281static __init void parse_cmdline_early (char ** cmdline_p)
274{ 282{
275 char c = ' ', *to = command_line, *from = COMMAND_LINE; 283 char c = ' ', *to = command_line, *from = COMMAND_LINE;
@@ -293,10 +301,10 @@ static __init void parse_cmdline_early (char ** cmdline_p)
293#endif 301#endif
294#ifdef CONFIG_ACPI 302#ifdef CONFIG_ACPI
295 /* "acpi=off" disables both ACPI table parsing and interpreter init */ 303 /* "acpi=off" disables both ACPI table parsing and interpreter init */
296 if (!memcmp(from, "acpi=off", 8)) 304 if (fullarg(from,"acpi=off"))
297 disable_acpi(); 305 disable_acpi();
298 306
299 if (!memcmp(from, "acpi=force", 10)) { 307 if (fullarg(from, "acpi=force")) {
300 /* add later when we do DMI horrors: */ 308 /* add later when we do DMI horrors: */
301 acpi_force = 1; 309 acpi_force = 1;
302 acpi_disabled = 0; 310 acpi_disabled = 0;
@@ -304,52 +312,47 @@ static __init void parse_cmdline_early (char ** cmdline_p)
304 312
305 /* acpi=ht just means: do ACPI MADT parsing 313 /* acpi=ht just means: do ACPI MADT parsing
306 at bootup, but don't enable the full ACPI interpreter */ 314 at bootup, but don't enable the full ACPI interpreter */
307 if (!memcmp(from, "acpi=ht", 7)) { 315 if (fullarg(from, "acpi=ht")) {
308 if (!acpi_force) 316 if (!acpi_force)
309 disable_acpi(); 317 disable_acpi();
310 acpi_ht = 1; 318 acpi_ht = 1;
311 } 319 }
312 else if (!memcmp(from, "pci=noacpi", 10)) 320 else if (fullarg(from, "pci=noacpi"))
313 acpi_disable_pci(); 321 acpi_disable_pci();
314 else if (!memcmp(from, "acpi=noirq", 10)) 322 else if (fullarg(from, "acpi=noirq"))
315 acpi_noirq_set(); 323 acpi_noirq_set();
316 324
317 else if (!memcmp(from, "acpi_sci=edge", 13)) 325 else if (fullarg(from, "acpi_sci=edge"))
318 acpi_sci_flags.trigger = 1; 326 acpi_sci_flags.trigger = 1;
319 else if (!memcmp(from, "acpi_sci=level", 14)) 327 else if (fullarg(from, "acpi_sci=level"))
320 acpi_sci_flags.trigger = 3; 328 acpi_sci_flags.trigger = 3;
321 else if (!memcmp(from, "acpi_sci=high", 13)) 329 else if (fullarg(from, "acpi_sci=high"))
322 acpi_sci_flags.polarity = 1; 330 acpi_sci_flags.polarity = 1;
323 else if (!memcmp(from, "acpi_sci=low", 12)) 331 else if (fullarg(from, "acpi_sci=low"))
324 acpi_sci_flags.polarity = 3; 332 acpi_sci_flags.polarity = 3;
325 333
326 /* acpi=strict disables out-of-spec workarounds */ 334 /* acpi=strict disables out-of-spec workarounds */
327 else if (!memcmp(from, "acpi=strict", 11)) { 335 else if (fullarg(from, "acpi=strict")) {
328 acpi_strict = 1; 336 acpi_strict = 1;
329 } 337 }
330#ifdef CONFIG_X86_IO_APIC 338#ifdef CONFIG_X86_IO_APIC
331 else if (!memcmp(from, "acpi_skip_timer_override", 24)) 339 else if (fullarg(from, "acpi_skip_timer_override"))
332 acpi_skip_timer_override = 1; 340 acpi_skip_timer_override = 1;
333#endif 341#endif
334#endif 342#endif
335 343
336 if (!memcmp(from, "disable_timer_pin_1", 19)) 344 if (fullarg(from, "disable_timer_pin_1"))
337 disable_timer_pin_1 = 1; 345 disable_timer_pin_1 = 1;
338 if (!memcmp(from, "enable_timer_pin_1", 18)) 346 if (fullarg(from, "enable_timer_pin_1"))
339 disable_timer_pin_1 = -1; 347 disable_timer_pin_1 = -1;
340 348
341 if (!memcmp(from, "nolapic", 7) || 349 if (fullarg(from, "nolapic") || fullarg(from, "disableapic"))
342 !memcmp(from, "disableapic", 11))
343 disable_apic = 1; 350 disable_apic = 1;
344 351
345 /* Don't confuse with noapictimer */ 352 if (fullarg(from, "noapic"))
346 if (!memcmp(from, "noapic", 6) &&
347 (from[6] == ' ' || from[6] == 0))
348 skip_ioapic_setup = 1; 353 skip_ioapic_setup = 1;
349 354
350 /* Make sure to not confuse with apic= */ 355 if (fullarg(from,"apic")) {
351 if (!memcmp(from, "apic", 4) &&
352 (from[4] == ' ' || from[4] == 0)) {
353 skip_ioapic_setup = 0; 356 skip_ioapic_setup = 0;
354 ioapic_force = 1; 357 ioapic_force = 1;
355 } 358 }
@@ -388,7 +391,7 @@ static __init void parse_cmdline_early (char ** cmdline_p)
388 iommu_setup(from+6); 391 iommu_setup(from+6);
389 } 392 }
390 393
391 if (!memcmp(from,"oops=panic", 10)) 394 if (fullarg(from,"oops=panic"))
392 panic_on_oops = 1; 395 panic_on_oops = 1;
393 396
394 if (!memcmp(from, "noexec=", 7)) 397 if (!memcmp(from, "noexec=", 7))