crash.c 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. /*
  2. * Architecture specific (PPC64) functions for kexec based crash dumps.
  3. *
  4. * Copyright (C) 2005, IBM Corp.
  5. *
  6. * Created by: Haren Myneni
  7. *
  8. * This source code is licensed under the GNU General Public License,
  9. * Version 2. See the file COPYING for more details.
  10. *
  11. */
  12. #include <linux/kernel.h>
  13. #include <linux/smp.h>
  14. #include <linux/reboot.h>
  15. #include <linux/kexec.h>
  16. #include <linux/export.h>
  17. #include <linux/crash_dump.h>
  18. #include <linux/delay.h>
  19. #include <linux/irq.h>
  20. #include <linux/types.h>
  21. #include <asm/processor.h>
  22. #include <asm/machdep.h>
  23. #include <asm/kexec.h>
  24. #include <asm/kdump.h>
  25. #include <asm/prom.h>
  26. #include <asm/smp.h>
  27. #include <asm/setjmp.h>
  28. #include <asm/debug.h>
  29. /*
  30. * The primary CPU waits a while for all secondary CPUs to enter. This is to
  31. * avoid sending an IPI if the secondary CPUs are entering
  32. * crash_kexec_secondary on their own (eg via a system reset).
  33. *
  34. * The secondary timeout has to be longer than the primary. Both timeouts are
  35. * in milliseconds.
  36. */
  37. #define PRIMARY_TIMEOUT 500
  38. #define SECONDARY_TIMEOUT 1000
  39. #define IPI_TIMEOUT 10000
  40. #define REAL_MODE_TIMEOUT 10000
  41. static int time_to_dump;
  42. #define CRASH_HANDLER_MAX 3
  43. /* List of shutdown handles */
  44. static crash_shutdown_t crash_shutdown_handles[CRASH_HANDLER_MAX];
  45. static DEFINE_SPINLOCK(crash_handlers_lock);
  46. static unsigned long crash_shutdown_buf[JMP_BUF_LEN];
  47. static int crash_shutdown_cpu = -1;
  48. static int handle_fault(struct pt_regs *regs)
  49. {
  50. if (crash_shutdown_cpu == smp_processor_id())
  51. longjmp(crash_shutdown_buf, 1);
  52. return 0;
  53. }
  54. #ifdef CONFIG_SMP
  55. static atomic_t cpus_in_crash;
  56. static void crash_ipi_callback(struct pt_regs *regs)
  57. {
  58. static cpumask_t cpus_state_saved = CPU_MASK_NONE;
  59. int cpu = smp_processor_id();
  60. hard_irq_disable();
  61. if (!cpumask_test_cpu(cpu, &cpus_state_saved)) {
  62. crash_save_cpu(regs, cpu);
  63. cpumask_set_cpu(cpu, &cpus_state_saved);
  64. }
  65. atomic_inc(&cpus_in_crash);
  66. smp_mb__after_atomic();
  67. /*
  68. * Starting the kdump boot.
  69. * This barrier is needed to make sure that all CPUs are stopped.
  70. */
  71. while (!time_to_dump)
  72. cpu_relax();
  73. if (ppc_md.kexec_cpu_down)
  74. ppc_md.kexec_cpu_down(1, 1);
  75. #ifdef CONFIG_PPC64
  76. kexec_smp_wait();
  77. #else
  78. for (;;); /* FIXME */
  79. #endif
  80. /* NOTREACHED */
  81. }
  82. static void crash_kexec_prepare_cpus(int cpu)
  83. {
  84. unsigned int msecs;
  85. unsigned int ncpus = num_online_cpus() - 1;/* Excluding the panic cpu */
  86. int tries = 0;
  87. int (*old_handler)(struct pt_regs *regs);
  88. printk(KERN_EMERG "Sending IPI to other CPUs\n");
  89. crash_send_ipi(crash_ipi_callback);
  90. smp_wmb();
  91. again:
  92. /*
  93. * FIXME: Until we will have the way to stop other CPUs reliably,
  94. * the crash CPU will send an IPI and wait for other CPUs to
  95. * respond.
  96. */
  97. msecs = IPI_TIMEOUT;
  98. while ((atomic_read(&cpus_in_crash) < ncpus) && (--msecs > 0))
  99. mdelay(1);
  100. /* Would it be better to replace the trap vector here? */
  101. if (atomic_read(&cpus_in_crash) >= ncpus) {
  102. printk(KERN_EMERG "IPI complete\n");
  103. return;
  104. }
  105. printk(KERN_EMERG "ERROR: %d cpu(s) not responding\n",
  106. ncpus - atomic_read(&cpus_in_crash));
  107. /*
  108. * If we have a panic timeout set then we can't wait indefinitely
  109. * for someone to activate system reset. We also give up on the
  110. * second time through if system reset fail to work.
  111. */
  112. if ((panic_timeout > 0) || (tries > 0))
  113. return;
  114. /*
  115. * A system reset will cause all CPUs to take an 0x100 exception.
  116. * The primary CPU returns here via setjmp, and the secondary
  117. * CPUs reexecute the crash_kexec_secondary path.
  118. */
  119. old_handler = __debugger;
  120. __debugger = handle_fault;
  121. crash_shutdown_cpu = smp_processor_id();
  122. if (setjmp(crash_shutdown_buf) == 0) {
  123. printk(KERN_EMERG "Activate system reset (dumprestart) "
  124. "to stop other cpu(s)\n");
  125. /*
  126. * A system reset will force all CPUs to execute the
  127. * crash code again. We need to reset cpus_in_crash so we
  128. * wait for everyone to do this.
  129. */
  130. atomic_set(&cpus_in_crash, 0);
  131. smp_mb();
  132. while (atomic_read(&cpus_in_crash) < ncpus)
  133. cpu_relax();
  134. }
  135. crash_shutdown_cpu = -1;
  136. __debugger = old_handler;
  137. tries++;
  138. goto again;
  139. }
  140. /*
  141. * This function will be called by secondary cpus.
  142. */
  143. void crash_kexec_secondary(struct pt_regs *regs)
  144. {
  145. unsigned long flags;
  146. int msecs = SECONDARY_TIMEOUT;
  147. local_irq_save(flags);
  148. /* Wait for the primary crash CPU to signal its progress */
  149. while (crashing_cpu < 0) {
  150. if (--msecs < 0) {
  151. /* No response, kdump image may not have been loaded */
  152. local_irq_restore(flags);
  153. return;
  154. }
  155. mdelay(1);
  156. }
  157. crash_ipi_callback(regs);
  158. }
  159. #else /* ! CONFIG_SMP */
  160. static void crash_kexec_prepare_cpus(int cpu)
  161. {
  162. /*
  163. * move the secondaries to us so that we can copy
  164. * the new kernel 0-0x100 safely
  165. *
  166. * do this if kexec in setup.c ?
  167. */
  168. #ifdef CONFIG_PPC64
  169. smp_release_cpus();
  170. #else
  171. /* FIXME */
  172. #endif
  173. }
  174. void crash_kexec_secondary(struct pt_regs *regs)
  175. {
  176. }
  177. #endif /* CONFIG_SMP */
  178. /* wait for all the CPUs to hit real mode but timeout if they don't come in */
  179. #if defined(CONFIG_SMP) && defined(CONFIG_PPC64)
  180. static void __maybe_unused crash_kexec_wait_realmode(int cpu)
  181. {
  182. unsigned int msecs;
  183. int i;
  184. msecs = REAL_MODE_TIMEOUT;
  185. for (i=0; i < nr_cpu_ids && msecs > 0; i++) {
  186. if (i == cpu)
  187. continue;
  188. while (paca[i].kexec_state < KEXEC_STATE_REAL_MODE) {
  189. barrier();
  190. if (!cpu_possible(i) || !cpu_online(i) || (msecs <= 0))
  191. break;
  192. msecs--;
  193. mdelay(1);
  194. }
  195. }
  196. mb();
  197. }
  198. #else
  199. static inline void crash_kexec_wait_realmode(int cpu) {}
  200. #endif /* CONFIG_SMP && CONFIG_PPC64 */
  201. /*
  202. * Register a function to be called on shutdown. Only use this if you
  203. * can't reset your device in the second kernel.
  204. */
  205. int crash_shutdown_register(crash_shutdown_t handler)
  206. {
  207. unsigned int i, rc;
  208. spin_lock(&crash_handlers_lock);
  209. for (i = 0 ; i < CRASH_HANDLER_MAX; i++)
  210. if (!crash_shutdown_handles[i]) {
  211. /* Insert handle at first empty entry */
  212. crash_shutdown_handles[i] = handler;
  213. rc = 0;
  214. break;
  215. }
  216. if (i == CRASH_HANDLER_MAX) {
  217. printk(KERN_ERR "Crash shutdown handles full, "
  218. "not registered.\n");
  219. rc = 1;
  220. }
  221. spin_unlock(&crash_handlers_lock);
  222. return rc;
  223. }
  224. EXPORT_SYMBOL(crash_shutdown_register);
  225. int crash_shutdown_unregister(crash_shutdown_t handler)
  226. {
  227. unsigned int i, rc;
  228. spin_lock(&crash_handlers_lock);
  229. for (i = 0 ; i < CRASH_HANDLER_MAX; i++)
  230. if (crash_shutdown_handles[i] == handler)
  231. break;
  232. if (i == CRASH_HANDLER_MAX) {
  233. printk(KERN_ERR "Crash shutdown handle not found\n");
  234. rc = 1;
  235. } else {
  236. /* Shift handles down */
  237. for (; i < (CRASH_HANDLER_MAX - 1); i++)
  238. crash_shutdown_handles[i] =
  239. crash_shutdown_handles[i+1];
  240. /*
  241. * Reset last entry to NULL now that it has been shifted down,
  242. * this will allow new handles to be added here.
  243. */
  244. crash_shutdown_handles[i] = NULL;
  245. rc = 0;
  246. }
  247. spin_unlock(&crash_handlers_lock);
  248. return rc;
  249. }
  250. EXPORT_SYMBOL(crash_shutdown_unregister);
  251. void default_machine_crash_shutdown(struct pt_regs *regs)
  252. {
  253. unsigned int i;
  254. int (*old_handler)(struct pt_regs *regs);
  255. /*
  256. * This function is only called after the system
  257. * has panicked or is otherwise in a critical state.
  258. * The minimum amount of code to allow a kexec'd kernel
  259. * to run successfully needs to happen here.
  260. *
  261. * In practice this means stopping other cpus in
  262. * an SMP system.
  263. * The kernel is broken so disable interrupts.
  264. */
  265. hard_irq_disable();
  266. /*
  267. * Make a note of crashing cpu. Will be used in machine_kexec
  268. * such that another IPI will not be sent.
  269. */
  270. crashing_cpu = smp_processor_id();
  271. /*
  272. * If we came in via system reset, wait a while for the secondary
  273. * CPUs to enter.
  274. */
  275. if (TRAP(regs) == 0x100)
  276. mdelay(PRIMARY_TIMEOUT);
  277. crash_kexec_prepare_cpus(crashing_cpu);
  278. crash_save_cpu(regs, crashing_cpu);
  279. time_to_dump = 1;
  280. crash_kexec_wait_realmode(crashing_cpu);
  281. machine_kexec_mask_interrupts();
  282. /*
  283. * Call registered shutdown routines safely. Swap out
  284. * __debugger_fault_handler, and replace on exit.
  285. */
  286. old_handler = __debugger_fault_handler;
  287. __debugger_fault_handler = handle_fault;
  288. crash_shutdown_cpu = smp_processor_id();
  289. for (i = 0; i < CRASH_HANDLER_MAX && crash_shutdown_handles[i]; i++) {
  290. if (setjmp(crash_shutdown_buf) == 0) {
  291. /*
  292. * Insert syncs and delay to ensure
  293. * instructions in the dangerous region don't
  294. * leak away from this protected region.
  295. */
  296. asm volatile("sync; isync");
  297. /* dangerous region */
  298. crash_shutdown_handles[i]();
  299. asm volatile("sync; isync");
  300. }
  301. }
  302. crash_shutdown_cpu = -1;
  303. __debugger_fault_handler = old_handler;
  304. if (ppc_md.kexec_cpu_down)
  305. ppc_md.kexec_cpu_down(1, 0);
  306. }