aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/kernel/smp.c
diff options
context:
space:
mode:
authorAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
committerAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
commitada47b5fe13d89735805b566185f4885f5a3f750 (patch)
tree644b88f8a71896307d71438e9b3af49126ffb22b /arch/sh/kernel/smp.c
parent43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff)
parent3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff)
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'arch/sh/kernel/smp.c')
-rw-r--r--arch/sh/kernel/smp.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c
index 160db1003cfb..002cc612deef 100644
--- a/arch/sh/kernel/smp.c
+++ b/arch/sh/kernel/smp.c
@@ -69,6 +69,7 @@ asmlinkage void __cpuinit start_secondary(void)
69 unsigned int cpu; 69 unsigned int cpu;
70 struct mm_struct *mm = &init_mm; 70 struct mm_struct *mm = &init_mm;
71 71
72 enable_mmu();
72 atomic_inc(&mm->mm_count); 73 atomic_inc(&mm->mm_count);
73 atomic_inc(&mm->mm_users); 74 atomic_inc(&mm->mm_users);
74 current->active_mm = mm; 75 current->active_mm = mm;
@@ -122,7 +123,9 @@ int __cpuinit __cpu_up(unsigned int cpu)
122 stack_start.bss_start = 0; /* don't clear bss for secondary cpus */ 123 stack_start.bss_start = 0; /* don't clear bss for secondary cpus */
123 stack_start.start_kernel_fn = start_secondary; 124 stack_start.start_kernel_fn = start_secondary;
124 125
125 flush_cache_all(); 126 flush_icache_range((unsigned long)&stack_start,
127 (unsigned long)&stack_start + sizeof(stack_start));
128 wmb();
126 129
127 plat_start_cpu(cpu, (unsigned long)_stext); 130 plat_start_cpu(cpu, (unsigned long)_stext);
128 131
@@ -159,15 +162,6 @@ void smp_send_reschedule(int cpu)
159 plat_send_ipi(cpu, SMP_MSG_RESCHEDULE); 162 plat_send_ipi(cpu, SMP_MSG_RESCHEDULE);
160} 163}
161 164
162static void stop_this_cpu(void *unused)
163{
164 cpu_clear(smp_processor_id(), cpu_online_map);
165 local_irq_disable();
166
167 for (;;)
168 cpu_relax();
169}
170
171void smp_send_stop(void) 165void smp_send_stop(void)
172{ 166{
173 smp_call_function(stop_this_cpu, 0, 0); 167 smp_call_function(stop_this_cpu, 0, 0);