diff options
Diffstat (limited to 'arch/ia64/kernel/process.c')
-rw-r--r-- | arch/ia64/kernel/process.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c index 91293388dd29..7c43aea5f7f7 100644 --- a/arch/ia64/kernel/process.c +++ b/arch/ia64/kernel/process.c | |||
@@ -3,6 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Copyright (C) 1998-2003 Hewlett-Packard Co | 4 | * Copyright (C) 1998-2003 Hewlett-Packard Co |
5 | * David Mosberger-Tang <davidm@hpl.hp.com> | 5 | * David Mosberger-Tang <davidm@hpl.hp.com> |
6 | * 04/11/17 Ashok Raj <ashok.raj@intel.com> Added CPU Hotplug Support | ||
6 | */ | 7 | */ |
7 | #define __KERNEL_SYSCALLS__ /* see <asm/unistd.h> */ | 8 | #define __KERNEL_SYSCALLS__ /* see <asm/unistd.h> */ |
8 | #include <linux/config.h> | 9 | #include <linux/config.h> |
@@ -200,27 +201,20 @@ default_idle (void) | |||
200 | static inline void play_dead(void) | 201 | static inline void play_dead(void) |
201 | { | 202 | { |
202 | extern void ia64_cpu_local_tick (void); | 203 | extern void ia64_cpu_local_tick (void); |
204 | unsigned int this_cpu = smp_processor_id(); | ||
205 | |||
203 | /* Ack it */ | 206 | /* Ack it */ |
204 | __get_cpu_var(cpu_state) = CPU_DEAD; | 207 | __get_cpu_var(cpu_state) = CPU_DEAD; |
205 | 208 | ||
206 | /* We shouldn't have to disable interrupts while dead, but | ||
207 | * some interrupts just don't seem to go away, and this makes | ||
208 | * it "work" for testing purposes. */ | ||
209 | max_xtp(); | 209 | max_xtp(); |
210 | local_irq_disable(); | 210 | local_irq_disable(); |
211 | /* Death loop */ | 211 | idle_task_exit(); |
212 | while (__get_cpu_var(cpu_state) != CPU_UP_PREPARE) | 212 | ia64_jump_to_sal(&sal_boot_rendez_state[this_cpu]); |
213 | cpu_relax(); | ||
214 | |||
215 | /* | 213 | /* |
216 | * Enable timer interrupts from now on | 214 | * The above is a point of no-return, the processor is |
217 | * Not required if we put processor in SAL_BOOT_RENDEZ mode. | 215 | * expected to be in SAL loop now. |
218 | */ | 216 | */ |
219 | local_flush_tlb_all(); | 217 | BUG(); |
220 | cpu_set(smp_processor_id(), cpu_online_map); | ||
221 | wmb(); | ||
222 | ia64_cpu_local_tick (); | ||
223 | local_irq_enable(); | ||
224 | } | 218 | } |
225 | #else | 219 | #else |
226 | static inline void play_dead(void) | 220 | static inline void play_dead(void) |