summaryrefslogtreecommitdiff
path: root/drivers/staging/greybus/svc_watchdog.c
diff options
context:
space:
mode:
authorDavid Lin <dtwlin@google.com>2016-07-27 02:27:28 +0300
committerGreg Kroah-Hartman <gregkh@google.com>2016-07-27 06:58:37 +0300
commit7c4a0edb38ba734bd89efbda4262698a58839c26 (patch)
treea0c4cfc896bbfc7d4198f71a75047e4279533569 /drivers/staging/greybus/svc_watchdog.c
parent6136cce89ca5d344d5183d36e887f0ff46896f1c (diff)
downloadlinux-7c4a0edb38ba734bd89efbda4262698a58839c26.tar.xz
greybus: svc_watchdog: Add sysfs file to change the behavior of bite
Currently, AP performs unipro_reset if SVC fails to response to its ping. While this error recovery is best suited for the end-user experience, errors in the UniPro network could potentially go unnoticed by the QA and fishfooders in the development phase of the project. This patch adds an option to trigger a kernel panic so logs can be collected for analysis. Testing Done: - Reproduce issue and observe kernel panic when watchdob_control is changed to 'panic' Signed-off-by: David Lin <dtwlin@google.com> Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'drivers/staging/greybus/svc_watchdog.c')
-rw-r--r--drivers/staging/greybus/svc_watchdog.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/drivers/staging/greybus/svc_watchdog.c b/drivers/staging/greybus/svc_watchdog.c
index 6cd3bac59852..1295cc153af9 100644
--- a/drivers/staging/greybus/svc_watchdog.c
+++ b/drivers/staging/greybus/svc_watchdog.c
@@ -83,16 +83,21 @@ static void do_work(struct work_struct *work)
dev_err(&svc->dev,
"SVC ping has returned %d, something is wrong!!!\n",
retval);
- dev_err(&svc->dev, "Resetting the greybus network, watch out!!!\n");
- INIT_DELAYED_WORK(&reset_work, greybus_reset);
- queue_delayed_work(system_wq, &reset_work, HZ/2);
+ if (svc->action == GB_SVC_WATCHDOG_BITE_PANIC_KERNEL) {
+ panic("SVC is not responding\n");
+ } else if (svc->action == GB_SVC_WATCHDOG_BITE_RESET_UNIPRO) {
+ dev_err(&svc->dev, "Resetting the greybus network, watch out!!!\n");
- /*
- * Disable ourselves, we don't want to trip again unless
- * userspace wants us to.
- */
- watchdog->enabled = false;
+ INIT_DELAYED_WORK(&reset_work, greybus_reset);
+ queue_delayed_work(system_wq, &reset_work, HZ / 2);
+
+ /*
+ * Disable ourselves, we don't want to trip again unless
+ * userspace wants us to.
+ */
+ watchdog->enabled = false;
+ }
}
/* resubmit our work to happen again, if we are still "alive" */