mirror of https://github.com/OpenIPC/firmware.git
59 lines
1.3 KiB
Diff
59 lines
1.3 KiB
Diff
diff -drupN a/kernel/panic.c b/kernel/panic.c
|
|
--- a/kernel/panic.c 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/kernel/panic.c 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -24,7 +24,12 @@
|
|
#include <linux/init.h>
|
|
#include <linux/nmi.h>
|
|
#include <linux/console.h>
|
|
+#include <linux/cpu.h>
|
|
+#include <linux/cpumask.h>
|
|
+#include <linux/arisc/arisc.h>
|
|
+#include <asm/cacheflush.h>
|
|
#include <linux/bug.h>
|
|
+#include <linux/sunxi-dump.h>
|
|
|
|
#define PANIC_TIMER_STEP 100
|
|
#define PANIC_BLINK_SPD 18
|
|
@@ -40,6 +45,13 @@ int panic_on_warn __read_mostly;
|
|
int panic_timeout = CONFIG_PANIC_TIMEOUT;
|
|
EXPORT_SYMBOL_GPL(panic_timeout);
|
|
|
|
+#ifdef CONFIG_SUNXI_DUMP
|
|
+int sunxi_dump = 1;
|
|
+#else
|
|
+int sunxi_dump;
|
|
+#endif
|
|
+EXPORT_SYMBOL_GPL(sunxi_dump);
|
|
+
|
|
ATOMIC_NOTIFIER_HEAD(panic_notifier_list);
|
|
|
|
EXPORT_SYMBOL(panic_notifier_list);
|
|
@@ -285,6 +297,27 @@ void panic(const char *fmt, ...)
|
|
}
|
|
#endif
|
|
pr_emerg("---[ end Kernel panic - not syncing: %s\n", buf);
|
|
+
|
|
+ if (sunxi_dump) {
|
|
+ unsigned int i;
|
|
+
|
|
+ flush_cache_all();
|
|
+ sunxi_dump_group_dump();
|
|
+
|
|
+ for (i = 0; i < num_possible_cpus(); i++) {
|
|
+ if (i == smp_processor_id())
|
|
+ continue;
|
|
+
|
|
+ while (1) {
|
|
+ if (!cpu_online(i))
|
|
+ break;
|
|
+ mdelay(10);
|
|
+ }
|
|
+ }
|
|
+ pr_emerg("crashdump enter\n");
|
|
+ arisc_set_crashdump_mode();
|
|
+ }
|
|
+
|
|
local_irq_enable();
|
|
for (i = 0; ; i += PANIC_TIMER_STEP) {
|
|
touch_softlockup_watchdog();
|