diff options
author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
---|---|---|
committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
commit | ada47b5fe13d89735805b566185f4885f5a3f750 (patch) | |
tree | 644b88f8a71896307d71438e9b3af49126ffb22b /arch/sh/kernel/smp.c | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (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.c | 14 |
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 | ||
162 | static 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 | |||
171 | void smp_send_stop(void) | 165 | void smp_send_stop(void) |
172 | { | 166 | { |
173 | smp_call_function(stop_this_cpu, 0, 0); | 167 | smp_call_function(stop_this_cpu, 0, 0); |