aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64/kernel/process.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/ia64/kernel/process.c')
-rw-r--r--arch/ia64/kernel/process.c22
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)
200static inline void play_dead(void) 201static 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
226static inline void play_dead(void) 220static inline void play_dead(void)