debug: add watchdog trigger in sysrq
authorjianxin.pan <jianxin.pan@amlogic.com>
Mon, 7 May 2018 06:25:48 +0000 (14:25 +0800)
committerYixun Lan <yixun.lan@amlogic.com>
Thu, 10 May 2018 04:14:17 +0000 (21:14 -0700)
PD#165796: watchdog trigger to debug wdt related behavior
"echo x > /proc/sysrq-trigger" to trigger watchdog

Change-Id: Iddd92cd64c9a7ccdf452f23706b396eaf50ae448
Signed-off-by: jianxin.pan <jianxin.pan@amlogic.com>
drivers/tty/sysrq.c

index 53cbf4e..359fbd5 100644 (file)
@@ -150,6 +150,26 @@ static struct sysrq_key_op sysrq_crash_op = {
        .enable_mask    = SYSRQ_ENABLE_DUMP,
 };
 
+#ifdef CONFIG_AMLOGIC_MODIFY
+static DEFINE_SPINLOCK(wdt_lock);
+static void sysrq_handle_wdt_sw_rst(int key)
+{
+       unsigned long flags;
+
+       spin_lock_irqsave(&wdt_lock, flags);
+       while (1)
+               ;
+       /* wait for wdt fiq to kick in. */
+}
+
+static struct sysrq_key_op sysrq_wdt_sw_op = {
+       .handler        = sysrq_handle_wdt_sw_rst,
+       .help_msg       = "dis intr to riggger wdt rst(x)",
+       .action_msg     = "Trigger a sw wdt reset",
+       .enable_mask    = SYSRQ_ENABLE_DUMP,
+};
+#endif
+
 static void sysrq_handle_reboot(int key)
 {
        lockdep_off();
@@ -484,7 +504,9 @@ static struct sysrq_key_op *sysrq_key_table[36] = {
        /* x: May be registered on mips for TLB dump */
        /* x: May be registered on ppc/powerpc for xmon */
        /* x: May be registered on sparc64 for global PMU dump */
-       NULL,                           /* x */
+#ifdef CONFIG_AMLOGIC_MODIFY
+       &sysrq_wdt_sw_op,               /* x */
+#endif
        /* y: May be registered on sparc64 for global register dump */
        NULL,                           /* y */
        &sysrq_ftrace_dump_op,          /* z */