summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorPrasad Sodagudi <psodagud@codeaurora.org>2017-03-01 15:03:05 -0800
committerPrasad Sodagudi <psodagud@codeaurora.org>2017-03-02 12:55:47 -0800
commitdb79acdf6fc2f400bf7445d2c69489af70651d52 (patch)
treea6c91e08ba7e9413deb65a65986dbe259e0bed7a /kernel
parent3e14267831b4e4befaa949aa001f0b340715c01b (diff)
watchdog: Induce non secure watchdog bite for lockup
Induce non secure watchdog bite when ever kernel soft lockup or hard lockups are detected. So that proper context of cpus can be collected for debugging. Change-Id: I613391d8d53fe52ce7934cdc910fb135c4e0fbf2 Signed-off-by: Prasad Sodagudi <psodagud@codeaurora.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/watchdog.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/kernel/watchdog.c b/kernel/watchdog.c
index f2813e137b23..91fa701b4a24 100644
--- a/kernel/watchdog.c
+++ b/kernel/watchdog.c
@@ -27,6 +27,7 @@
#include <linux/kvm_para.h>
#include <linux/perf_event.h>
#include <linux/kthread.h>
+#include <soc/qcom/watchdog.h>
/*
* The run state of the lockup detectors is controlled by the content of the
@@ -366,8 +367,11 @@ static void watchdog_check_hardlockup_other_cpu(void)
if (per_cpu(hard_watchdog_warn, next_cpu) == true)
return;
- if (hardlockup_panic)
- panic("Watchdog detected hard LOCKUP on cpu %u", next_cpu);
+ if (hardlockup_panic) {
+ pr_err("Watchdog detected hard LOCKUP on cpu %u",
+ next_cpu);
+ msm_trigger_wdog_bite();
+ }
else
WARN(1, "Watchdog detected hard LOCKUP on cpu %u", next_cpu);
@@ -430,6 +434,9 @@ static void watchdog_overflow_callback(struct perf_event *event,
return;
pr_emerg("Watchdog detected hard LOCKUP on cpu %d", this_cpu);
+ if (hardlockup_panic)
+ msm_trigger_wdog_bite();
+
print_modules();
print_irqtrace_events(current);
if (regs)
@@ -552,6 +559,9 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
pr_emerg("BUG: soft lockup - CPU#%d stuck for %us! [%s:%d]\n",
smp_processor_id(), duration,
current->comm, task_pid_nr(current));
+
+ if (softlockup_panic)
+ msm_trigger_wdog_bite();
__this_cpu_write(softlockup_task_ptr_saved, current);
print_modules();
print_irqtrace_events(current);