diff options
| -rw-r--r-- | arch/x86/Kconfig | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/apic/apic.c | 7 | ||||
| -rw-r--r-- | include/linux/smp.h | 7 | ||||
| -rw-r--r-- | init/main.c | 13 |
4 files changed, 18 insertions, 13 deletions
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index ba397bde7948..ffcc3ca5862a 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
| @@ -855,6 +855,10 @@ config SCHED_MC | |||
| 855 | 855 | ||
| 856 | source "kernel/Kconfig.preempt" | 856 | source "kernel/Kconfig.preempt" |
| 857 | 857 | ||
| 858 | config UP_LATE_INIT | ||
| 859 | def_bool y | ||
| 860 | depends on X86_UP_APIC | ||
| 861 | |||
| 858 | config X86_UP_APIC | 862 | config X86_UP_APIC |
| 859 | bool "Local APIC support on uniprocessors" | 863 | bool "Local APIC support on uniprocessors" |
| 860 | depends on X86_32 && !SMP && !X86_32_NON_STANDARD && !PCI_MSI | 864 | depends on X86_32 && !SMP && !X86_32_NON_STANDARD && !PCI_MSI |
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index c681e9ba9e47..19f1bc714ee6 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c | |||
| @@ -2267,6 +2267,13 @@ int __init APIC_init_uniprocessor(void) | |||
| 2267 | return 0; | 2267 | return 0; |
| 2268 | } | 2268 | } |
| 2269 | 2269 | ||
| 2270 | #ifdef CONFIG_UP_LATE_INIT | ||
| 2271 | void __init up_late_init(void) | ||
| 2272 | { | ||
| 2273 | APIC_init_uniprocessor(); | ||
| 2274 | } | ||
| 2275 | #endif | ||
| 2276 | |||
| 2270 | /* | 2277 | /* |
| 2271 | * Power management | 2278 | * Power management |
| 2272 | */ | 2279 | */ |
diff --git a/include/linux/smp.h b/include/linux/smp.h index 93dff5fff524..be91db2a7017 100644 --- a/include/linux/smp.h +++ b/include/linux/smp.h | |||
| @@ -151,6 +151,13 @@ smp_call_function_any(const struct cpumask *mask, smp_call_func_t func, | |||
| 151 | static inline void kick_all_cpus_sync(void) { } | 151 | static inline void kick_all_cpus_sync(void) { } |
| 152 | static inline void wake_up_all_idle_cpus(void) { } | 152 | static inline void wake_up_all_idle_cpus(void) { } |
| 153 | 153 | ||
| 154 | #ifdef CONFIG_UP_LATE_INIT | ||
| 155 | extern void __init up_late_init(void); | ||
| 156 | static inline void smp_init(void) { up_late_init(); } | ||
| 157 | #else | ||
| 158 | static inline void smp_init(void) { } | ||
| 159 | #endif | ||
| 160 | |||
| 154 | #endif /* !SMP */ | 161 | #endif /* !SMP */ |
| 155 | 162 | ||
| 156 | /* | 163 | /* |
diff --git a/init/main.c b/init/main.c index 61b993767db5..179ada15d08a 100644 --- a/init/main.c +++ b/init/main.c | |||
| @@ -87,10 +87,6 @@ | |||
| 87 | #include <asm/sections.h> | 87 | #include <asm/sections.h> |
| 88 | #include <asm/cacheflush.h> | 88 | #include <asm/cacheflush.h> |
| 89 | 89 | ||
| 90 | #ifdef CONFIG_X86_LOCAL_APIC | ||
| 91 | #include <asm/smp.h> | ||
| 92 | #endif | ||
| 93 | |||
| 94 | static int kernel_init(void *); | 90 | static int kernel_init(void *); |
| 95 | 91 | ||
| 96 | extern void init_IRQ(void); | 92 | extern void init_IRQ(void); |
| @@ -351,15 +347,6 @@ __setup("rdinit=", rdinit_setup); | |||
| 351 | 347 | ||
| 352 | #ifndef CONFIG_SMP | 348 | #ifndef CONFIG_SMP |
| 353 | static const unsigned int setup_max_cpus = NR_CPUS; | 349 | static const unsigned int setup_max_cpus = NR_CPUS; |
| 354 | #ifdef CONFIG_X86_LOCAL_APIC | ||
| 355 | static void __init smp_init(void) | ||
| 356 | { | ||
| 357 | APIC_init_uniprocessor(); | ||
| 358 | } | ||
| 359 | #else | ||
| 360 | #define smp_init() do { } while (0) | ||
| 361 | #endif | ||
| 362 | |||
| 363 | static inline void setup_nr_cpu_ids(void) { } | 350 | static inline void setup_nr_cpu_ids(void) { } |
| 364 | static inline void smp_prepare_cpus(unsigned int maxcpus) { } | 351 | static inline void smp_prepare_cpus(unsigned int maxcpus) { } |
| 365 | #endif | 352 | #endif |
