summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorPrasad Sodagudi <psodagud@codeaurora.org>2017-03-06 11:04:46 -0800
committerPrasad Sodagudi <psodagud@codeaurora.org>2017-03-09 10:07:35 -0800
commit4f659aa55edf0c322710abfd9389501f8f68dc79 (patch)
treebb3227c6b3fe5fd379394df65cd3df9dab3d85ba /kernel
parent647076b679f3ac76db31d875eda2d7a99be764e6 (diff)
rcu: Induce msm watchdog bite for rcu stalls
Every RCU stall need to be debugged, So collect the ram dumps on every RCU stall to debug further by inducing non secure watchdog bite whenever rcu stall detected. Change-Id: I6c1cfddc92f06b48c3f22fe9970b70f2ec670bf6 Signed-off-by: Prasad Sodagudi <psodagud@codeaurora.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/rcu/tree.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index f07343b54fe5..2cb46d51d715 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -57,6 +57,8 @@
#include <linux/trace_events.h>
#include <linux/suspend.h>
+#include <soc/qcom/watchdog.h>
+
#include "tree.h"
#include "rcu.h"
@@ -1298,6 +1300,11 @@ static void print_other_cpu_stall(struct rcu_state *rsp, unsigned long gpnum)
rcu_check_gp_kthread_starvation(rsp);
+#ifdef CONFIG_RCU_STALL_WATCHDOG_BITE
+ /* Induce watchdog bite */
+ msm_trigger_wdog_bite();
+#endif
+
force_quiescent_state(rsp); /* Kick them all. */
}
@@ -1333,6 +1340,11 @@ static void print_cpu_stall(struct rcu_state *rsp)
jiffies + 3 * rcu_jiffies_till_stall_check() + 3);
raw_spin_unlock_irqrestore(&rnp->lock, flags);
+#ifdef CONFIG_RCU_STALL_WATCHDOG_BITE
+ /* Induce non secure watchdog bite to collect context */
+ msm_trigger_wdog_bite();
+#endif
+
/*
* Attempt to revive the RCU machinery by forcing a context switch.
*