diff options
Diffstat (limited to 'arch/powerpc/kernel/crash.c')
-rw-r--r-- | arch/powerpc/kernel/crash.c | 59 |
1 files changed, 30 insertions, 29 deletions
diff --git a/arch/powerpc/kernel/crash.c b/arch/powerpc/kernel/crash.c index 5b5e1f002a8e..5eb0ee37f6cd 100644 --- a/arch/powerpc/kernel/crash.c +++ b/arch/powerpc/kernel/crash.c | |||
@@ -162,34 +162,6 @@ static void crash_kexec_prepare_cpus(int cpu) | |||
162 | /* Leave the IPI callback set */ | 162 | /* Leave the IPI callback set */ |
163 | } | 163 | } |
164 | 164 | ||
165 | /* wait for all the CPUs to hit real mode but timeout if they don't come in */ | ||
166 | #ifdef CONFIG_PPC_STD_MMU_64 | ||
167 | static void crash_kexec_wait_realmode(int cpu) | ||
168 | { | ||
169 | unsigned int msecs; | ||
170 | int i; | ||
171 | |||
172 | msecs = 10000; | ||
173 | for (i=0; i < NR_CPUS && msecs > 0; i++) { | ||
174 | if (i == cpu) | ||
175 | continue; | ||
176 | |||
177 | while (paca[i].kexec_state < KEXEC_STATE_REAL_MODE) { | ||
178 | barrier(); | ||
179 | if (!cpu_possible(i)) { | ||
180 | break; | ||
181 | } | ||
182 | if (!cpu_online(i)) { | ||
183 | break; | ||
184 | } | ||
185 | msecs--; | ||
186 | mdelay(1); | ||
187 | } | ||
188 | } | ||
189 | mb(); | ||
190 | } | ||
191 | #endif /* CONFIG_PPC_STD_MMU_64 */ | ||
192 | |||
193 | /* | 165 | /* |
194 | * This function will be called by secondary cpus or by kexec cpu | 166 | * This function will be called by secondary cpus or by kexec cpu |
195 | * if soft-reset is activated to stop some CPUs. | 167 | * if soft-reset is activated to stop some CPUs. |
@@ -234,7 +206,6 @@ void crash_kexec_secondary(struct pt_regs *regs) | |||
234 | } | 206 | } |
235 | 207 | ||
236 | #else /* ! CONFIG_SMP */ | 208 | #else /* ! CONFIG_SMP */ |
237 | static inline void crash_kexec_wait_realmode(int cpu) {} | ||
238 | 209 | ||
239 | static void crash_kexec_prepare_cpus(int cpu) | 210 | static void crash_kexec_prepare_cpus(int cpu) |
240 | { | 211 | { |
@@ -257,6 +228,36 @@ void crash_kexec_secondary(struct pt_regs *regs) | |||
257 | } | 228 | } |
258 | #endif /* CONFIG_SMP */ | 229 | #endif /* CONFIG_SMP */ |
259 | 230 | ||
231 | /* wait for all the CPUs to hit real mode but timeout if they don't come in */ | ||
232 | #if defined(CONFIG_SMP) && defined(CONFIG_PPC_STD_MMU_64) | ||
233 | static void crash_kexec_wait_realmode(int cpu) | ||
234 | { | ||
235 | unsigned int msecs; | ||
236 | int i; | ||
237 | |||
238 | msecs = 10000; | ||
239 | for (i=0; i < NR_CPUS && msecs > 0; i++) { | ||
240 | if (i == cpu) | ||
241 | continue; | ||
242 | |||
243 | while (paca[i].kexec_state < KEXEC_STATE_REAL_MODE) { | ||
244 | barrier(); | ||
245 | if (!cpu_possible(i)) { | ||
246 | break; | ||
247 | } | ||
248 | if (!cpu_online(i)) { | ||
249 | break; | ||
250 | } | ||
251 | msecs--; | ||
252 | mdelay(1); | ||
253 | } | ||
254 | } | ||
255 | mb(); | ||
256 | } | ||
257 | #else | ||
258 | static inline void crash_kexec_wait_realmode(int cpu) {} | ||
259 | #endif /* CONFIG_SMP && CONFIG_PPC_STD_MMU_64 */ | ||
260 | |||
260 | /* | 261 | /* |
261 | * Register a function to be called on shutdown. Only use this if you | 262 | * Register a function to be called on shutdown. Only use this if you |
262 | * can't reset your device in the second kernel. | 263 | * can't reset your device in the second kernel. |