firmware/br-ext-chip-allwinner/board/v83x/kernel/patches/00000-kernel_panic.c.patch

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();