|
@@ -704,6 +704,30 @@ int check_legacy_ioport(unsigned long base_port)
|
|
|
}
|
|
|
EXPORT_SYMBOL(check_legacy_ioport);
|
|
|
|
|
|
+static int ppc_panic_event(struct notifier_block *this,
|
|
|
+ unsigned long event, void *ptr)
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * If firmware-assisted dump has been registered then trigger
|
|
|
+ * firmware-assisted dump and let firmware handle everything else.
|
|
|
+ */
|
|
|
+ crash_fadump(NULL, ptr);
|
|
|
+ ppc_md.panic(ptr); /* May not return */
|
|
|
+ return NOTIFY_DONE;
|
|
|
+}
|
|
|
+
|
|
|
+static struct notifier_block ppc_panic_block = {
|
|
|
+ .notifier_call = ppc_panic_event,
|
|
|
+ .priority = INT_MIN /* may not return; must be done last */
|
|
|
+};
|
|
|
+
|
|
|
+void __init setup_panic(void)
|
|
|
+{
|
|
|
+ if (!ppc_md.panic)
|
|
|
+ return;
|
|
|
+ atomic_notifier_chain_register(&panic_notifier_list, &ppc_panic_block);
|
|
|
+}
|
|
|
+
|
|
|
#ifdef CONFIG_CHECK_CACHE_COHERENCY
|
|
|
/*
|
|
|
* For platforms that have configurable cache-coherency. This function
|
|
@@ -848,6 +872,9 @@ void __init setup_arch(char **cmdline_p)
|
|
|
/* Probe the machine type, establish ppc_md. */
|
|
|
probe_machine();
|
|
|
|
|
|
+ /* Setup panic notifier if requested by the platform. */
|
|
|
+ setup_panic();
|
|
|
+
|
|
|
/*
|
|
|
* Configure ppc_md.power_save (ppc32 only, 64-bit machines do
|
|
|
* it from their respective probe() function.
|