diff options
Diffstat (limited to 'arch/x86/kernel/process_32.c')
-rw-r--r-- | arch/x86/kernel/process_32.c | 39 |
1 files changed, 2 insertions, 37 deletions
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index 205188db9626..922c14058f97 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c | |||
@@ -76,47 +76,12 @@ unsigned long thread_saved_pc(struct task_struct *tsk) | |||
76 | return ((unsigned long *)tsk->thread.sp)[3]; | 76 | return ((unsigned long *)tsk->thread.sp)[3]; |
77 | } | 77 | } |
78 | 78 | ||
79 | #ifdef CONFIG_HOTPLUG_CPU | 79 | #ifndef CONFIG_SMP |
80 | #include <asm/nmi.h> | ||
81 | |||
82 | static void cpu_exit_clear(void) | ||
83 | { | ||
84 | int cpu = raw_smp_processor_id(); | ||
85 | |||
86 | idle_task_exit(); | ||
87 | |||
88 | cpu_uninit(); | ||
89 | irq_ctx_exit(cpu); | ||
90 | |||
91 | cpu_clear(cpu, cpu_callout_map); | ||
92 | cpu_clear(cpu, cpu_callin_map); | ||
93 | |||
94 | numa_remove_cpu(cpu); | ||
95 | c1e_remove_cpu(cpu); | ||
96 | } | ||
97 | |||
98 | /* We don't actually take CPU down, just spin without interrupts. */ | ||
99 | static inline void play_dead(void) | ||
100 | { | ||
101 | /* This must be done before dead CPU ack */ | ||
102 | cpu_exit_clear(); | ||
103 | mb(); | ||
104 | /* Ack it */ | ||
105 | __get_cpu_var(cpu_state) = CPU_DEAD; | ||
106 | |||
107 | /* | ||
108 | * With physical CPU hotplug, we should halt the cpu | ||
109 | */ | ||
110 | local_irq_disable(); | ||
111 | /* mask all interrupts, flush any and all caches, and halt */ | ||
112 | wbinvd_halt(); | ||
113 | } | ||
114 | #else | ||
115 | static inline void play_dead(void) | 80 | static inline void play_dead(void) |
116 | { | 81 | { |
117 | BUG(); | 82 | BUG(); |
118 | } | 83 | } |
119 | #endif /* CONFIG_HOTPLUG_CPU */ | 84 | #endif |
120 | 85 | ||
121 | /* | 86 | /* |
122 | * The idle thread. There's no useful work to be | 87 | * The idle thread. There's no useful work to be |