diff options
Diffstat (limited to 'arch/x86_64/kernel/apic.c')
-rw-r--r-- | arch/x86_64/kernel/apic.c | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/arch/x86_64/kernel/apic.c b/arch/x86_64/kernel/apic.c index 496cd1bd2ae5..660602c51f51 100644 --- a/arch/x86_64/kernel/apic.c +++ b/arch/x86_64/kernel/apic.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <asm/idle.h> | 36 | #include <asm/idle.h> |
37 | #include <asm/proto.h> | 37 | #include <asm/proto.h> |
38 | #include <asm/timex.h> | 38 | #include <asm/timex.h> |
39 | #include <asm/apic.h> | ||
39 | 40 | ||
40 | int apic_verbosity; | 41 | int apic_verbosity; |
41 | int apic_runs_main_timer; | 42 | int apic_runs_main_timer; |
@@ -546,18 +547,24 @@ static void apic_pm_activate(void) { } | |||
546 | 547 | ||
547 | static int __init apic_set_verbosity(char *str) | 548 | static int __init apic_set_verbosity(char *str) |
548 | { | 549 | { |
550 | if (str == NULL) { | ||
551 | skip_ioapic_setup = 0; | ||
552 | ioapic_force = 1; | ||
553 | return 0; | ||
554 | } | ||
549 | if (strcmp("debug", str) == 0) | 555 | if (strcmp("debug", str) == 0) |
550 | apic_verbosity = APIC_DEBUG; | 556 | apic_verbosity = APIC_DEBUG; |
551 | else if (strcmp("verbose", str) == 0) | 557 | else if (strcmp("verbose", str) == 0) |
552 | apic_verbosity = APIC_VERBOSE; | 558 | apic_verbosity = APIC_VERBOSE; |
553 | else | 559 | else { |
554 | printk(KERN_WARNING "APIC Verbosity level %s not recognised" | 560 | printk(KERN_WARNING "APIC Verbosity level %s not recognised" |
555 | " use apic=verbose or apic=debug", str); | 561 | " use apic=verbose or apic=debug\n", str); |
562 | return -EINVAL; | ||
563 | } | ||
556 | 564 | ||
557 | return 1; | 565 | return 0; |
558 | } | 566 | } |
559 | 567 | early_param("apic", apic_set_verbosity); | |
560 | __setup("apic=", apic_set_verbosity); | ||
561 | 568 | ||
562 | /* | 569 | /* |
563 | * Detect and enable local APICs on non-SMP boards. | 570 | * Detect and enable local APICs on non-SMP boards. |
@@ -1078,14 +1085,17 @@ int __init APIC_init_uniprocessor (void) | |||
1078 | static __init int setup_disableapic(char *str) | 1085 | static __init int setup_disableapic(char *str) |
1079 | { | 1086 | { |
1080 | disable_apic = 1; | 1087 | disable_apic = 1; |
1081 | return 1; | 1088 | clear_bit(X86_FEATURE_APIC, boot_cpu_data.x86_capability); |
1082 | } | 1089 | return 0; |
1090 | } | ||
1091 | early_param("disableapic", setup_disableapic); | ||
1083 | 1092 | ||
1093 | /* same as disableapic, for compatibility */ | ||
1084 | static __init int setup_nolapic(char *str) | 1094 | static __init int setup_nolapic(char *str) |
1085 | { | 1095 | { |
1086 | disable_apic = 1; | 1096 | return setup_disableapic(str); |
1087 | return 1; | ||
1088 | } | 1097 | } |
1098 | early_param("nolapic", setup_nolapic); | ||
1089 | 1099 | ||
1090 | static __init int setup_noapictimer(char *str) | 1100 | static __init int setup_noapictimer(char *str) |
1091 | { | 1101 | { |
@@ -1118,11 +1128,5 @@ static __init int setup_apicpmtimer(char *s) | |||
1118 | } | 1128 | } |
1119 | __setup("apicpmtimer", setup_apicpmtimer); | 1129 | __setup("apicpmtimer", setup_apicpmtimer); |
1120 | 1130 | ||
1121 | /* dummy parsing: see setup.c */ | ||
1122 | |||
1123 | __setup("disableapic", setup_disableapic); | ||
1124 | __setup("nolapic", setup_nolapic); /* same as disableapic, for compatibility */ | ||
1125 | |||
1126 | __setup("noapictimer", setup_noapictimer); | 1131 | __setup("noapictimer", setup_noapictimer); |
1127 | 1132 | ||
1128 | /* no "lapic" flag - we only use the lapic when the BIOS tells us so. */ | ||