summaryrefslogtreecommitdiff
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
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>
-rw-r--r--kernel/rcu/tree.c12
-rw-r--r--lib/Kconfig.debug11
2 files changed, 23 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.
*
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 902657d4cac5..3cd6011f209d 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1455,6 +1455,17 @@ config RCU_CPU_STALL_TIMEOUT
RCU grace period persists, additional CPU stall warnings are
printed at more widely spaced intervals.
+config RCU_STALL_WATCHDOG_BITE
+ bool "RCU stall induce watchdog bite"
+ depends on RCU_STALL_COMMON && QCOM_WATCHDOG_V2
+ help
+ Induce watchdog bite if RCU grace period extends more than
+ specified no of seconds instead of just warning messages.
+ This helps to collect ram dumps and cpu context for
+ postmortem analysis. Generally if a given RCU grace period
+ extends more than the specified number of seconds,
+ a CPU stall warning is printed.
+
config RCU_TRACE
bool "Enable tracing for RCU"
depends on DEBUG_KERNEL