aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel
diff options
context:
space:
mode:
authorBen Hutchings <ben@decadent.org.uk>2011-04-24 11:04:31 -0400
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2011-05-18 23:09:21 -0400
commit35d215fbe4f4d3569f2adabd8d53510a26ecb9c5 (patch)
tree26c809153cd5ae3f0a2133af66424c1723ba40ed /arch/powerpc/kernel
parent69e3cea8d5fd52677f2b6219542d0f8b53fe4c80 (diff)
powerpc/kexec: Fix build failure on 32-bit SMP
Commit b987812b3fcaf70fdf0037589e5d2f5f2453e6ce left crash_kexec_wait_realmode() undefined for UP. Commit 7c7a81b53e581d727d069cc45df5510516faac31 defined it for UP but left it undefined for 32-bit SMP. Seems like people are getting confused by nested #ifdef's, so move the definitions of crash_kexec_wait_realmode() after the #ifdef CONFIG_SMP section. Compile-tested with 32-bit UP, 32-bit SMP and 64-bit SMP configurations. Signed-off-by: Ben Hutchings <ben@decadent.org.uk> Tested-by: Paul Gortmaker <paul.gortmaker@windriver.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel')
-rw-r--r--arch/powerpc/kernel/crash.c59
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
167static 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 */
237static inline void crash_kexec_wait_realmode(int cpu) {}
238 209
239static void crash_kexec_prepare_cpus(int cpu) 210static 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)
233static 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
258static 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.