Commit 8ec4d41f authored by Gerd Hoffmann's avatar Gerd Hoffmann Committed by Linus Torvalds

[PATCH] SMP alternatives: skip with UP kernels

Hide the magic in alternative.h and provide some dummy inline functions
for the UP case (gcc should manage to optimize away these calls).  No
changes in module.c.

Cc: Dave Jones <davej@codemonkey.org.uk>
Cc: Andi Kleen <ak@muc.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 27b678dd
...@@ -168,6 +168,8 @@ void apply_alternatives(struct alt_instr *start, struct alt_instr *end) ...@@ -168,6 +168,8 @@ void apply_alternatives(struct alt_instr *start, struct alt_instr *end)
} }
} }
#ifdef CONFIG_SMP
static void alternatives_smp_save(struct alt_instr *start, struct alt_instr *end) static void alternatives_smp_save(struct alt_instr *start, struct alt_instr *end)
{ {
struct alt_instr *a; struct alt_instr *a;
...@@ -328,6 +330,8 @@ void alternatives_smp_switch(int smp) ...@@ -328,6 +330,8 @@ void alternatives_smp_switch(int smp)
spin_unlock_irqrestore(&smp_alt, flags); spin_unlock_irqrestore(&smp_alt, flags);
} }
#endif
void __init alternative_instructions(void) void __init alternative_instructions(void)
{ {
if (no_replacement) { if (no_replacement) {
...@@ -349,6 +353,7 @@ void __init alternative_instructions(void) ...@@ -349,6 +353,7 @@ void __init alternative_instructions(void)
smp_alt_once = 1; smp_alt_once = 1;
#endif #endif
#ifdef CONFIG_SMP
if (smp_alt_once) { if (smp_alt_once) {
if (1 == num_possible_cpus()) { if (1 == num_possible_cpus()) {
printk(KERN_INFO "SMP alternatives: switching to UP code\n"); printk(KERN_INFO "SMP alternatives: switching to UP code\n");
...@@ -370,4 +375,5 @@ void __init alternative_instructions(void) ...@@ -370,4 +375,5 @@ void __init alternative_instructions(void)
_text, _etext); _text, _etext);
alternatives_smp_switch(0); alternatives_smp_switch(0);
} }
#endif
} }
...@@ -19,11 +19,19 @@ struct alt_instr { ...@@ -19,11 +19,19 @@ struct alt_instr {
extern void apply_alternatives(struct alt_instr *start, struct alt_instr *end); extern void apply_alternatives(struct alt_instr *start, struct alt_instr *end);
struct module; struct module;
#ifdef CONFIG_SMP
extern void alternatives_smp_module_add(struct module *mod, char *name, extern void alternatives_smp_module_add(struct module *mod, char *name,
void *locks, void *locks_end, void *locks, void *locks_end,
void *text, void *text_end); void *text, void *text_end);
extern void alternatives_smp_module_del(struct module *mod); extern void alternatives_smp_module_del(struct module *mod);
extern void alternatives_smp_switch(int smp); extern void alternatives_smp_switch(int smp);
#else
static inline void alternatives_smp_module_add(struct module *mod, char *name,
void *locks, void *locks_end,
void *text, void *text_end) {}
static inline void alternatives_smp_module_del(struct module *mod) {}
static inline void alternatives_smp_switch(int smp) {}
#endif
#endif #endif
......
...@@ -17,11 +17,20 @@ struct alt_instr { ...@@ -17,11 +17,20 @@ struct alt_instr {
extern void apply_alternatives(struct alt_instr *start, struct alt_instr *end); extern void apply_alternatives(struct alt_instr *start, struct alt_instr *end);
struct module; struct module;
#ifdef CONFIG_SMP
extern void alternatives_smp_module_add(struct module *mod, char *name, extern void alternatives_smp_module_add(struct module *mod, char *name,
void *locks, void *locks_end, void *locks, void *locks_end,
void *text, void *text_end); void *text, void *text_end);
extern void alternatives_smp_module_del(struct module *mod); extern void alternatives_smp_module_del(struct module *mod);
extern void alternatives_smp_switch(int smp); extern void alternatives_smp_switch(int smp);
#else
static inline void alternatives_smp_module_add(struct module *mod, char *name,
void *locks, void *locks_end,
void *text, void *text_end) {}
static inline void alternatives_smp_module_del(struct module *mod) {}
static inline void alternatives_smp_switch(int smp) {}
#endif
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment