diff options
-rw-r--r-- | arch/i386/kernel/alternative.c | 6 | ||||
-rw-r--r-- | include/asm-i386/alternative.h | 8 | ||||
-rw-r--r-- | include/asm-x86_64/alternative.h | 9 |
3 files changed, 23 insertions, 0 deletions
diff --git a/arch/i386/kernel/alternative.c b/arch/i386/kernel/alternative.c index 50eb0e03777e..7b421b3a053e 100644 --- a/arch/i386/kernel/alternative.c +++ b/arch/i386/kernel/alternative.c | |||
@@ -168,6 +168,8 @@ void apply_alternatives(struct alt_instr *start, struct alt_instr *end) | |||
168 | } | 168 | } |
169 | } | 169 | } |
170 | 170 | ||
171 | #ifdef CONFIG_SMP | ||
172 | |||
171 | static void alternatives_smp_save(struct alt_instr *start, struct alt_instr *end) | 173 | static void alternatives_smp_save(struct alt_instr *start, struct alt_instr *end) |
172 | { | 174 | { |
173 | struct alt_instr *a; | 175 | struct alt_instr *a; |
@@ -328,6 +330,8 @@ void alternatives_smp_switch(int smp) | |||
328 | spin_unlock_irqrestore(&smp_alt, flags); | 330 | spin_unlock_irqrestore(&smp_alt, flags); |
329 | } | 331 | } |
330 | 332 | ||
333 | #endif | ||
334 | |||
331 | void __init alternative_instructions(void) | 335 | void __init alternative_instructions(void) |
332 | { | 336 | { |
333 | if (no_replacement) { | 337 | if (no_replacement) { |
@@ -349,6 +353,7 @@ void __init alternative_instructions(void) | |||
349 | smp_alt_once = 1; | 353 | smp_alt_once = 1; |
350 | #endif | 354 | #endif |
351 | 355 | ||
356 | #ifdef CONFIG_SMP | ||
352 | if (smp_alt_once) { | 357 | if (smp_alt_once) { |
353 | if (1 == num_possible_cpus()) { | 358 | if (1 == num_possible_cpus()) { |
354 | printk(KERN_INFO "SMP alternatives: switching to UP code\n"); | 359 | printk(KERN_INFO "SMP alternatives: switching to UP code\n"); |
@@ -370,4 +375,5 @@ void __init alternative_instructions(void) | |||
370 | _text, _etext); | 375 | _text, _etext); |
371 | alternatives_smp_switch(0); | 376 | alternatives_smp_switch(0); |
372 | } | 377 | } |
378 | #endif | ||
373 | } | 379 | } |
diff --git a/include/asm-i386/alternative.h b/include/asm-i386/alternative.h index c61bd1a17f37..96adbabec740 100644 --- a/include/asm-i386/alternative.h +++ b/include/asm-i386/alternative.h | |||
@@ -19,11 +19,19 @@ struct alt_instr { | |||
19 | extern void apply_alternatives(struct alt_instr *start, struct alt_instr *end); | 19 | extern void apply_alternatives(struct alt_instr *start, struct alt_instr *end); |
20 | 20 | ||
21 | struct module; | 21 | struct module; |
22 | #ifdef CONFIG_SMP | ||
22 | extern void alternatives_smp_module_add(struct module *mod, char *name, | 23 | extern void alternatives_smp_module_add(struct module *mod, char *name, |
23 | void *locks, void *locks_end, | 24 | void *locks, void *locks_end, |
24 | void *text, void *text_end); | 25 | void *text, void *text_end); |
25 | extern void alternatives_smp_module_del(struct module *mod); | 26 | extern void alternatives_smp_module_del(struct module *mod); |
26 | extern void alternatives_smp_switch(int smp); | 27 | extern void alternatives_smp_switch(int smp); |
28 | #else | ||
29 | static inline void alternatives_smp_module_add(struct module *mod, char *name, | ||
30 | void *locks, void *locks_end, | ||
31 | void *text, void *text_end) {} | ||
32 | static inline void alternatives_smp_module_del(struct module *mod) {} | ||
33 | static inline void alternatives_smp_switch(int smp) {} | ||
34 | #endif | ||
27 | 35 | ||
28 | #endif | 36 | #endif |
29 | 37 | ||
diff --git a/include/asm-x86_64/alternative.h b/include/asm-x86_64/alternative.h index 387c8f66af7d..aa67bfd1b3ce 100644 --- a/include/asm-x86_64/alternative.h +++ b/include/asm-x86_64/alternative.h | |||
@@ -17,11 +17,20 @@ struct alt_instr { | |||
17 | extern void apply_alternatives(struct alt_instr *start, struct alt_instr *end); | 17 | extern void apply_alternatives(struct alt_instr *start, struct alt_instr *end); |
18 | 18 | ||
19 | struct module; | 19 | struct module; |
20 | |||
21 | #ifdef CONFIG_SMP | ||
20 | extern void alternatives_smp_module_add(struct module *mod, char *name, | 22 | extern void alternatives_smp_module_add(struct module *mod, char *name, |
21 | void *locks, void *locks_end, | 23 | void *locks, void *locks_end, |
22 | void *text, void *text_end); | 24 | void *text, void *text_end); |
23 | extern void alternatives_smp_module_del(struct module *mod); | 25 | extern void alternatives_smp_module_del(struct module *mod); |
24 | extern void alternatives_smp_switch(int smp); | 26 | extern void alternatives_smp_switch(int smp); |
27 | #else | ||
28 | static inline void alternatives_smp_module_add(struct module *mod, char *name, | ||
29 | void *locks, void *locks_end, | ||
30 | void *text, void *text_end) {} | ||
31 | static inline void alternatives_smp_module_del(struct module *mod) {} | ||
32 | static inline void alternatives_smp_switch(int smp) {} | ||
33 | #endif | ||
25 | 34 | ||
26 | #endif | 35 | #endif |
27 | 36 | ||