diff options
author | David Lin <dtwlin@google.com> | 2016-07-27 02:27:28 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@google.com> | 2016-07-27 06:58:37 +0300 |
commit | 7c4a0edb38ba734bd89efbda4262698a58839c26 (patch) | |
tree | a0c4cfc896bbfc7d4198f71a75047e4279533569 /drivers/staging/greybus/svc_watchdog.c | |
parent | 6136cce89ca5d344d5183d36e887f0ff46896f1c (diff) | |
download | linux-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.c | 21 |
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" */ |