aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/powernv/powernv.h
diff options
context:
space:
mode:
authorNicholas Piggin <npiggin@gmail.com>2017-07-19 16:59:10 +1000
committerMichael Ellerman <mpe@ellerman.id.au>2017-08-31 14:26:03 +1000
commitb746e3e01e70d23ef53dcde1203ab78a1b7ac514 (patch)
tree689ea32432c7fc82c505ebfa02e2be63051d057d /arch/powerpc/platforms/powernv/powernv.h
parentpowerpc: Do not send system reset request through the oops path (diff)
downloadlinux-dev-b746e3e01e70d23ef53dcde1203ab78a1b7ac514.tar.xz
linux-dev-b746e3e01e70d23ef53dcde1203ab78a1b7ac514.zip
powerpc/powernv: Flush console before platform error reboot
Unrecovered MCE and HMI errors are sent through a special restart OPAL call to log the platform error. The downside is that they don't go through normal Linux crash paths, so they don't give much information to the Linux console. Change this by providing a special crash function which does some of the console flushing from the panic() path before calling firmware to reboot. The downside of this is a little more code to execute before reaching the firmware reboot. However in practice, it's critical to get the Linux console messages output in order to debug a problem. So this is a desirable tradeoff. Note on the implementation: It is difficult to plumb a custom reboot handler into the panic path, because panic does a little bit too much work. For example, it will try to delay with the timebase, but that may be corrupted in some cases resulting in a hang without reaching the platform reboot. Another problem is that panic can invoke the crash dump code which is not what we want in the case of a hardware platform error. Long-term the best solution will be to rework the panic path so it can be suitable for this kind of panic, but for now we just duplicate a bit of the code. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Reviewed-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to '')
-rw-r--r--arch/powerpc/platforms/powernv/powernv.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/powernv/powernv.h b/arch/powerpc/platforms/powernv/powernv.h
index 6dbc0a1da1f6..a159d48573d7 100644
--- a/arch/powerpc/platforms/powernv/powernv.h
+++ b/arch/powerpc/platforms/powernv/powernv.h
@@ -7,6 +7,8 @@ extern void pnv_smp_init(void);
static inline void pnv_smp_init(void) { }
#endif
+extern void pnv_platform_error_reboot(struct pt_regs *regs, const char *msg) __noreturn;
+
struct pci_dev;
#ifdef CONFIG_PCI